1

我有一个 TreeView,它有自己的 Style 和 ItemContainerStyle。在 ItemContainerStyle 我有一个名为“SelectedRectangle”的边框。现在我想通过使用这段代码来改变这个“SelectedRectangle”的背景颜色(我在网上找到的):

    Border brd = (Border)lstDbTree.Template.FindName("SelectedRectangle", lstDbTree); //dosnt work - returns 'null'
    brd.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#7B7A7C")); // Null Pointer Exception

我不知道如何访问 ItemContainerStyle XAML 以编程方式对其进行操作。

编码:

壳牌.xaml

    <TreeView DockPanel.Dock="Bottom" Name="lstDbTree"
      ...
      ItemContainerStyle="{StaticResource DbTreeItemStyle}"
      ...
    />

CoreStyles.xaml

    <Style TargetType="TreeViewItem" x:Key="DbTreeItemStyle">
      <Setters...>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="TreeViewItem">
            ...
              <Border x:Name="SelectedRectangle" BorderBrush="#44ffffff" BorderThickness="1" Grid.Column="1" CornerRadius="1" IsHitTestVisible="False" Opacity="0" Background="#555355"/>
            ...
          </ControlTemplate>
        </Setter.Value>
      </Style

Shell.xaml.cs

    private void ColorB_OnClick(object sender, RoutedEventArgs e)
    {
        Border brd = (Border)lstDbTree.Template.FindName("SelectedRectangle", lstDbTree); //dosnt work
        brd.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#7B7A7C"));
    }

我想做的事

在此处输入图像描述

非常感谢任何帮助。

4

1 回答 1

1

我可以用 ItemContainerGenerator 解决这个问题:

    private void ColorB_OnClick(object sender, RoutedEventArgs e)
    {
        //TODO: Do this for all Items and not only for the "Selected Item"
        TreeViewItem tvi = lstDbTree.ItemContainerGenerator.ContainerFromItem(lstDbTree.SelectedItem) as TreeViewItem;
        Border brd = (Border)tvi.Template.FindName("SelectedRectangle", tvi);
        brd.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#7B7A7C"));
    }
于 2013-08-25T13:09:39.677 回答