2013-10-15 4 views
0

У меня есть TreeView с большим количеством предметов, очевидно расположенных в древовидной структуре. Я пытаюсь напечатать родительский узел жирным шрифтом и все его дети в обычном шрифте. Однако, когда я делаю:Изменение стиля применяется ко всем дочерним элементам узла TreeView

TreeViewItem item = GetParentNode(...); 
item.FontWeight = FontWeights.Bold; 

это не только меняет стиль родителя к смелым, но и все его детские. Я искал свойства, чтобы отключить это рекурсивное обновление в классе TreeView, но я не могу найти его. Как избежать такого поведения?

+0

Вы все делаете в коде? У вас есть HierarchicalDataTemplate в XAML? – sexta13

+0

Я разработал «TreeView» в XAML (хотя код настолько прост, что его вряд ли стоит упоминать), но установка веса шрифта должна выполняться программно, так как это часть взаимодействия пользователя. – Yellow

+0

Взгляните на это: http://stackoverflow.com/questions/4487604/setting-font-of-parent-in-nodes-in-wpf-tree-view-to-bold-using-code-behind Это показала аналогичную проблему, решена с помощью datatriggers. – sexta13

ответ

0

Когда вы устанавливаете свойства шрифта, он применяет его ко всем детям. Вы можете создать новый шаблон заголовка и применить его только к узлам, которые являются родителями.

Альтернативой, которая работала в моем тестировании устанавливает цвет переднего плана:

public MainWindow() 
    { 
     InitializeComponent(); 

     StyleParents(MyTreeView.Items); 
    } 

    private void StyleParents(ItemCollection items) 
    { 
     foreach (var i in items) 
     { 
      TreeViewItem tvi = i as TreeViewItem; 

      if (tvi != null) 
      { 
       if (tvi.HasItems) 
       { 
        tvi.Foreground = Brushes.Magenta; 

        StyleParents(tvi.Items); 
       } 
      }         
     } 
    } 
0

Я обнаружил, что в WPF TreeView, свойства переносятся на своих детей, если они еще не были установлены. Самый простой способ избежать этой проблемы (по крайней мере, программно) - установить шрифт дочернего узла на шрифт по умолчанию, как только он будет создан. Например.

TreeViewItem item = new TreeViewItem(); 
item.FontWeight = FontWeights.Normal; 
// ...add item to tree 

Если теперь установить FontWeight родительского узла полужирное, дети не изменится.

Смежные вопросы