C# 在数据绑定生成的WPF项中进行所有者绘制
我目前正在WPF TreeView显示器上工作。此树视图的内容来自普通数据绑定:C# 在数据绑定生成的WPF项中进行所有者绘制,c#,wpf,data-binding,treeview,treeviewitem,C#,Wpf,Data Binding,Treeview,Treeviewitem,我目前正在WPF TreeView显示器上工作。此树视图的内容来自普通数据绑定: <TreeView HorizontalAlignment="Stretch" x:Name="LogMonitor" VerticalAlignment="Stretch" ItemsSource="{Binding LogEntries, UpdateSourceTrigger = PropertyChanged }"> <TreeView.Re
<TreeView HorizontalAlignment="Stretch"
x:Name="LogMonitor"
VerticalAlignment="Stretch"
ItemsSource="{Binding LogEntries, UpdateSourceTrigger = PropertyChanged }">
<TreeView.Resources>
<HierarchicalDataTemplate
DataType="{x:Type Log:SystemLog}"
ItemsSource="{Binding Path=Lines}">
<TextBlock Text="{Binding Header}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
TreeView是按关键字过滤的,但我也希望对保留在TreeView中的所有TreeView项目进行关键字突出显示
例如,如果有一个标题为“This is a apple”且用户键入“apple”作为筛选关键字的TreeView项目,则它应该显示一个TreeView项目,如下所示:
我尝试了一些方法,但运气不太好
高亮显示需要字符串匹配并将颜色块放置在匹配的子字符串下面。似乎没有内置的样式模板可以按照这种方式进行装饰
它仅在未选择TreeViewItem时起作用,一旦选择,内置的draw调用无法找到以“highlight”样式绘制画布的方法,只留下一个空白区域
不可能,TreeView的ItemContainerGenerator不可设置且非虚拟 我只能想到另外一个选择:
谢谢。创建一个用户控件,将文本分为3个区域:预高亮、高亮和后高亮。您可以通过标准绑定和样式来完成这一切。每个TreeViewItem都是这些控件之一 将
UpdateSourceTrigger=PropertyChanged
更改为单向绑定是没有意义的:我将使用Snoop检查视觉层,看看是否有装饰层,我可以使用它将红色矩形添加到树视图上方,但节点文本下方。我不知道TreeView的装饰层是否是解决方案。我发现Snoop是一个神奇的工具。非常感谢。虽然我还没有找到一个像样的方法来做我想做的事。我尝试的方向是覆盖TreeView的GetContainerForItemOverride并返回我想要的子类。然后在TreeViewItem子类中执行OnRender覆盖。它不知怎的起作用了,但是有几个小毛病我很难摆脱。只是为了讨论,如果关键字在同一个文本中出现两次呢?很好。使用这种方法时,我们没有这种情况。另一个想法是使用StackPanel,用适当样式的文本块填充。也许在物业变更时填写。