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 にアクセスしてプログラムで操作する方法がわかりません。

コード:

Shell.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 に答える