【问题标题】:How to change the Border Background Color in a ItemContainerStyle programmatically?如何以编程方式更改 ItemContainerStyle 中的边框背景颜色?
【发布时间】:2013-08-28 00:40:57
【问题描述】:

我有一个 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"));
    }

我想做什么

非常感谢您的帮助。

【问题讨论】:

    标签: wpf templates styles findname


    【解决方案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"));
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多