繁体   English   中英

如何使TreeViewItem标头的一部分变为粗体?

[英]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属性,以使该NodeBold

如果要使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM