【问题标题】:How to set color to selected item at TreeView如何在 TreeView 中为所选项目设置颜色
【发布时间】:2015-10-06 21:52:19
【问题描述】:

我尝试将红色设置为 TreeView 上的选定项目:

 <TreeView x:Name="tvVisual" Grid.Row="0" Grid.RowSpan="2"
                  VirtualizingStackPanel.IsVirtualizing="True" 
ItemsSource="{Binding Childrens,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"      
                  VirtualizingStackPanel.VirtualizationMode="Recycling"
                  >
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate 
ItemsSource="{Binding Childs,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
                    <TextBlock Text="{Binding Path=Value.Name}"/>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>


            <TreeView.ItemContainerStyle>
                <Style TargetType="{x:Type TreeViewItem}" >
                    <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
                    <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />                           
                    <Setter Property="FontWeight" Value="Normal" />                            

                    <Style.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="BorderBrush" Value="Red"/>
                            <Setter Property="Background" Value="Bisque"/>
                        </Trigger>

                        <!-- Selected but does not have the focus -->
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsSelected" Value="True"/>
                                <Condition Property="IsSelectionActive" Value="False"/>
                            </MultiTrigger.Conditions>
                            <Setter Property="BorderBrush" Value="Red"/>
                        </MultiTrigger>
                    </Style.Triggers>                        
                </Style>
            </TreeView.ItemContainerStyle>


        </TreeView>

我从this Sheridan answer 获取了部分代码,但它不适用于我。 如果我将 IsSelected 属性更改为 IsExpanded - 它可以工作。 在我的 getter\setter:值改变了。

可能会有所帮助:我通过代码选择并展开所有子节点。

那么,如何让 IsSelected 项设置新颜色呢? 谢谢!

附:这很奇怪 - 但在 getter\setter PropertyChanged 为空......

 private bool _isSelected;      
    public bool IsSelected
    {
        get
        {
            return _isSelected;
        }
        set
        {
            _isSelected = value;
            OnPropertyChanged("IsSelected"); //PropertyChanged is null.
        }

    }

【问题讨论】:

    标签: wpf xaml treeview styles selecteditem


    【解决方案1】:
          <TreeView x:Name="tvVisual" BorderBrush="{DynamicResource scbTreeCategories}" BorderThickness="5"
                      VirtualizingStackPanel.IsVirtualizing="False"
                      ItemsSource="{Binding Childrens,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                      ScrollViewer.CanContentScroll="False"
                      TreeViewItem.Selected="tvVisual_Selected"                                                                   
                      >
    
                  <TreeView.ItemTemplate>
    
                    <HierarchicalDataTemplate ItemsSource="{Binding Childs,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
                        <TextBlock Text="{Binding Path=Name}">
                            <TextBlock.Style>
                                <Style TargetType="TextBlock">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding IsSelected}" Value="True">
                                            <!--<Setter Property="Background" Value="#4682B4" />-->
                                            <Setter Property="FontWeight" Value="Bold"/>
                                            <Setter Property="Background" Value="Blue"/>
                                            <Setter Property="Foreground" Value="White"/>
    
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding IsTargetItem}" Value="True">
                                            <Setter Property="FontWeight" Value="Bold"/>
                                            <Setter Property="Background" Value="Blue"/>
                                            <Setter Property="Foreground" Value="White"/>
                                       </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </TextBlock.Style>
                        </TextBlock>
                    </HierarchicalDataTemplate>
                </TreeView.ItemTemplate>
    
                <TreeView.ItemContainerStyle>
                        <Style TargetType="{x:Type TreeViewItem}" >
                            <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
                            <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
                        </Style>
                    </TreeView.ItemContainerStyle>
    
    
            </TreeView>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      • 2023-03-24
      • 2021-05-16
      • 1970-01-01
      相关资源
      最近更新 更多