c#WPF树视图项条件样式

时间:2015-04-10 16:16:10

标签: c# wpf treeview styles conditional

如何在绑定属性上有条件地设置treeviewitems样式

我遇到了一个问题,我想在树视图中设置项目样式,那些是有效选择和层次结构项目。

我已尝试将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>

1 个答案:

答案 0 :(得分:2)

对于DataTrigger,您需要通过向DataTrigger绑定字段添加值来完成条件。例如 <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>