特定RadGridView鼠标悬停时向ControlTemplate插入自定义Grid方法
特定RadGridView实例行悬停插入自定义内容实现方案
核心逻辑:不用额外写鼠标事件处理,RadGridView内置的行视觉状态已经控制了Background_Over边框的显示/隐藏——鼠标悬停时自动显示,移开自动隐藏。你只需要给目标实例单独定制行模板,把要加的Grid直接放到这个Border内部即可,模板不做全局注册就不会影响其他控件。
具体实现代码
直接给目标RadGridView赋值独立的RowTemplate,模板保留原有所有结构,仅修改Background_Over节点:
<telerik:RadGridView> <!-- 仅当前实例生效的行模板 --> <telerik:RadGridView.RowTemplate> <ControlTemplate TargetType="grid:GridViewRow"> <!-- 原有模板其他结构全部保留,仅修改Background_Over节点,给它加内部内容 --> <Border x:Name="Background_Over" Background="{TemplateBinding MouseOverBackground}" Margin="0 0 0 1" Grid.Column="0" Grid.ColumnSpan="4" Visibility="Collapsed" grid:SelectiveScrollingGrid.SelectiveScrollingClip="True"> <!-- 要插入的自定义内容直接放在这里 --> <Grid> <TextBlock Text="Example"/> </Grid> </Border> <Border x:Name="Background_Selected" Background="{TemplateBinding SelectedBackground}" Margin="0 0 0 1" Grid.Column="0" Grid.ColumnSpan="4" Visibility="Collapsed" grid:SelectiveScrollingGrid.SelectiveScrollingClip="True"/> <!-- 此处省略你原有ControlTemplate里的其余内容,务必全部保留避免样式/功能异常 --> </ControlTemplate> </telerik:RadGridView.RowTemplate> <!-- 此处保留RadGridView原有列定义、配置项等内容 --> </telerik:RadGridView>
关键说明
- 作用域控制:不要把这个模板放到窗口/应用级资源字典,直接作为当前RadGridView实例的RowTemplate属性值,就只会对这一个实例生效,不会全局污染。
- 无需额外事件代码:Telerik内置的GridViewRow视觉状态管理器已经处理了鼠标悬停的状态切换,悬停时自动把
Background_Over的Visibility改为Visible,内部的自定义Grid会同步显示,鼠标移走自动隐藏,不需要手动写MouseEnter/MouseLeave事件处理。 - 如果是基于Telerik默认行模板修改,除了给
Background_Over加子内容外,其余模板节点不要随意删除,否则会出现选中状态失效、滚动异常等问题。
内容的提问来源于stack exchange,提问作者Ohad Cohen
相关产品推荐
相关产品推荐

