我正在尝试在SQL和wpf中实现简单的搜索功能...我只需要突出显示TextBox
中输入的结果中的下一部分。
因此,我在SQL中进行搜索以获取结果并将其放在TreeViewItem
上,然后将其添加到TreeView
中。一切正常,但是我该如何解决,只将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);
}
答案 0 :(得分:0)
您可以使用HeaderTemplate
中的TreeViewItem
实现这一目标。从后面的代码添加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 。
答案 1 :(得分:0)
如果要使用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>