2012-01-22 2 views
0

Я пытаюсь изменить фон TreeViewItems в TreeView на основе свойства (boolean), прикрепленного к TreeViewItems. Я попытался это:Изменение фона TreeViewItem на основе прикрепленного свойства

<local:BooleanToBrushConverter x:Key="BooleanToBrushConverter" 
            TrueBrush="Yellow" FalseBrush="Transparent"/> 


    <local:TreeViewEx ItemsSource="{Binding Items}"> 

     <TreeView.ItemContainerStyle> 
      <Style TargetType="{x:Type TreeViewItem}"> 
       <Setter Property="IsExpanded" Value="True"/> 
       <Setter Property="Background" Value="{Binding Path=(local:TreeViewItemExtensions.Selected), 
                   RelativeSource={RelativeSource Self}, 
                   Converter={StaticResource BooleanToBrushConverter}}"/> 
     <TreeView.Resources> 
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/> 
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Green"/> 
     </TreeView.Resources> 

     ... 

    </local:TreeViewEx> 

Ран приложения, но хотя я (программно) установить свойство (Selected, не следует путать с IsSelected), чтобы правда о «ребенке» TreeViewItem фон не был набор

Я взял взгляд с Snoop и обнаружили, что он не имеет желтый фон, как он должен (преобразователь срабатывает и возвращается правильно):

enter image description here

Однако, принимая быстрый взгляд в Snoop это показывает, что Желтый b бросаться была применена к этому TreeViewItem:

enter image description here

Однако, если я вручную установить фон для родительского StackPanel ([016] в Snoop) он отражает это значение. Но я не могу добраться до него по стилю.

Любые идеи?


UPDATE: Кажется, что выбранный элемент имеет какой-то стиль, который требует решения как-то ..

ответ

2

Проблемные вытекает из того, что TreeView.ItemContainerStyle only applies to the root item. Если заменить TreeView.ItemContainerStyle стиля по умолчанию для TreeViewItem в TreeView.Resources вы получите стиль, который применяется ко всем элементам (в том TreeView):

<TreeView> 
     <TreeView.Resources> 
      <!-- default style instead of ItemContainerStyle --> 
      <Style TargetType="TreeViewItem"> 
       <Setter Property="Background" 
         Value="{Binding Path=(local:TreeViewItemExtensions.Selected), 
             RelativeSource={RelativeSource Self}, 
             Converter={StaticResource BooleanToBrushConverter}}"/> 
      </Style> 
     </TreeView.Resources> 
     <TreeViewItem Header="Root" IsExpanded="True"> 
      <TreeViewItem Header="Child"/> 
      <TreeViewItem Header="Child" Name="testChild"/> 
      <TreeViewItem Header="Child"/> 
     </TreeViewItem> 
    </TreeView> 

Теперь установка Selected вложенного свойства работает:

TreeViewItemExtensions.SetSelected(testChild, true); 
Смежные вопросы