Как сделать часть заголовка TreeViewItem жирным шрифтом? - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь реализовать простую функцию поиска в 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);
}

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Если вы собираетесь использовать wpf для какой-либо существенной работы, вы должны использовать MVVM.Работать напрямую с элементами управления можно для очень простых вещей, но сложность возрастает очень быстро.Вместо этого вам следует связать данные и шаблоны в элементы управления.

Именно так должен использоваться WPF.

Работать с базовыми данными, а не с элементами управления.

Если вывзгляните на этот пример:

https://gallery.technet.microsoft.com/WPF-Highlight-Matching-71ad5a04

Он работает с просмотром списка, а не с просмотром дерева, и выделяет текст, делая фон красным.Не совсем то, что вам нужно.Но принцип - это то, на что нужно обратить внимание.

Вы можете легко изменить используемый список просмотра на древовидное представление.

Сказав это, вы, кажется, имеете только уровень элементов в своем древовидном представлении,так что вы в любом случае можете использовать просмотр списка в любом случае.

Во всяком случае.

Если вы посмотрите, вы увидите, что каждый элемент разделен с помощью регулярного выражения, так что есть отдельная модель представления RunHiза каждый кусок.Соответствующим частям IsMatch присвоено значение true на их RunHi.Они формируются в виде горизонтального списка - так что он выглядит как один текстовый блок, но на самом деле один или несколько расположены один за другим.Каждая строка списка представляет собой список.Конечно, вы можете сделать заголовок каждого элемента дерева представлением списка, если вам особенно нужен вид дерева.

Блок данных используется для придания фону желтого цвета.Чтобы сделать его жирным, вы можете просто изменить эту часть:

  <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>
0 голосов
/ 17 февраля 2019

Вы можете достичь этого, используя HeaderTemplate вашего TreeViewItem.Когда вы добавляете TreeViewItem из кода, вы можете использовать свойство Tag, чтобы определить, какое из них должно быть установлено как Жирный .

Вы можете добавить ниже 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 свойство, чтобы сделать Узел как Полужирный .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...