[英]How to make part of TreeViewItem Header bold?
我正在尝试在SQL和wpf中实现一个简单的搜索功能...我只需要突出显示已在TextBox
输入的结果中的下一部分内容。
因此,我在SQL中进行搜索以获取结果并将其放在TreeViewItem
,然后将其添加到TreeView
。 一切正常,但是我将如何仅使TreeViewItem
标头的特定部分TreeViewItem
粗体?
我已经知道如何找到我想要加粗的文本的位置,但是我只需要将其加粗即可。
TreeViewItem root_item = new TreeViewItem() { Header = "Users" };
FoundUsersTreeView.Items.Add(root_item);
while (sqlReader.Read())
{
TreeViewItem new_item = new TreeViewItem() { Header = sqlReader.GetString(0) };
root_item.Items.Add(new_item);
}
您可以使用TreeViewItem
HeaderTemplate
实现此目的。 从后面的代码添加TreeViewItem
,可以使用Tag
属性来区分需要将哪个设置为Bold 。
您可以在DataTemplate
下面添加到Resources
。
DataTemplate中
<DataTemplate x:Key="headerTemplate">
<TextBlock Text="{Binding}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding Tag, RelativeSource={RelativeSource AncestorType=TreeViewItem, Mode=FindAncestor}}"
Value="True">
<Setter Property="FontWeight" Value="Bold"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
背后的代码
TreeViewItem root_item = new TreeViewItem() { Header = "Users" };
treeView.Items.Add(root_item);
while (sqlReader.Read())
{
var new_item = new TreeViewItem { Header = sqlReader.GetString(0), Tag = true };
new_item.HeaderTemplate = Resources["headerTemplate"] as DataTemplate;
root_item.Items.Add(new_item);
}
您可以将boolean
值设置为Tag
属性,以使该Node为Bold 。
如果要使用wpf进行大量工作,则应使用MVVM。 对于非常简单的内容,直接使用控件是可以的,但难度会很快提高。 您应该改为将数据和模板绑定到控件中。
这就是打算使用WPF的方式。
处理基础数据而不是控件。
如果您看一下此示例:
https://gallery.technet.microsoft.com/WPF-Highlight-Matching-71ad5a04
它使用列表视图而不是树形视图,并通过将背景设为红色来突出显示文本。 不完全是您所需要的。 但是原则是要看的东西。
您可以轻松地将列表视图更改为树视图。
话虽如此,您似乎只在树状视图中具有项目级别,因此您无论如何都可以使用列表视图。
无论如何。
如果您看一看,您会看到每个项目都使用正则表达式拆分,因此每个部件都有一个单独的RunHi视图模型。 匹配的块在其RunHi上将IsMatch设置为true。 它们被模板化为水平列表视图-因此它看起来像一个文本块,但实际上是一个或多个排列在一起的。 列表视图的每一行本身就是一个列表视图。 当然,如果您特别想要一个树视图,则可以将每个treeviewitem的标题设置为listview。
数据触发器用于使背景变黄。 要使其变为粗体,您可以更改该部分:
<ControlTemplate TargetType="{x:Type ListViewItem}">
<TextBlock Text="{Binding Text}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding IsMatch}" Value="True">
<Setter Property="FontWeight" Value="Bold"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</ControlTemplate>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.