简体   繁体   English

c#WPF树视图项条件样式

[英]c# WPF Tree View Item conditional styling

How do you conditionally style treeviewitems on binded properties 如何在绑定属性上有条件地设置treeviewitems样式

I'm running into an issue where I want to style items in a Tree View, those that are valid selections vs hierarchy items. 我遇到了一个问题,我想在树视图中设置项目样式,那些是有效选择和层次结构项目。

I've tried to move my style tag into a TreeView.Resources and a TreeView.ItemContainerStyle tag but it still doesn't cause any formatting. 我试图将我的style标记移动到TreeView.ResourcesTreeView.ItemContainerStyle标记中,但它仍然不会导致任何格式化。

<TabItem Name="Queries" Header="Queries" 
         d:DataContext="{d:DesignInstance views:QuerySettingsView}">
  <Grid>
    <TreeView ItemsSource="{Binding QueryTreeModels}" 
              Width="500" Height="200" VerticalAlignment="Top" 
              HorizontalAlignment="Center" Margin="0,0,175,0">
      <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
          <HierarchicalDataTemplate.ItemContainerStyle>
            <Style >
              <Setter Property="TreeViewItem.IsExpanded" 
                      Value="{Binding IsExpanded, Mode=TwoWay}" />
              <Setter Property="TreeViewItem.IsSelected" 
                      Value="{Binding IsSelected, Mode=TwoWay}" />
              <Style.Triggers>
                <DataTrigger Binding="{Binding IsQuery}">
                  <Setter Property="TextBlock.Foreground" Value="Chartreuse" />
               </DataTrigger>
               <DataTrigger Binding="{Binding IsFolder}">
                 <Setter Property="TextBlock.Foreground" Value="Crimson" />
               </DataTrigger>
             </Style.Triggers>
           </Style>
         </HierarchicalDataTemplate.ItemContainerStyle>
         <TextBlock Text="{Binding Name}"/>
       </HierarchicalDataTemplate>
     </TreeView.ItemTemplate>
   </TreeView>
 </Grid>
</TabItem>

For DataTrigger you need to complete the condition by adding a value to DataTrigger bound field. 对于DataTrigger,您需要通过向DataTrigger绑定字段添加值来完成条件。 like <DataTrigger Binding="{Binding IsQuery}" Value="true"> Refer the below code. 喜欢<DataTrigger Binding="{Binding IsQuery}" Value="true">请参阅以下代码。

<TreeView x:Name="tree" Width="500" Height="200"
          VerticalAlignment="Top" HorizontalAlignment="Center"
          >
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Children}">
                <HierarchicalDataTemplate.ItemContainerStyle>                       
                    <Style >
                        <Setter Property="TreeViewItem.IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
                        <Setter Property="TreeViewItem.IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsQuery}" Value="true">
                                <Setter Property="TreeViewItem.Foreground" Value="Chartreuse" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding IsFolder}" Value="true">
                                <Setter Property="TreeViewItem.Foreground" Value="Crimson" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </HierarchicalDataTemplate.ItemContainerStyle>
                <TextBlock Text="{Binding NodeName}"/>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM