【问题标题】:WPF style triggers on a TreeView?TreeView 上的 WPF 样式触发器?
【发布时间】:2012-04-23 19:29:44
【问题描述】:

我在我的 xaml 中定义了以下树视图:

        <TreeView Name="PST_TreeView"
              Grid.Row="0"
              Grid.Column="0"
              Width="Auto"
              Height="Auto"
              HorizontalAlignment="Stretch"
              VerticalAlignment="Stretch"
              ItemsSource="{Binding SitesCollection}"
              ItemTemplate="{StaticResource SitesTemplate}"
              Style="{StaticResource TreeViewStyleBasic}" />

使用针对我的资源文件的资源绑定:

    <Style x:Key="TreeViewStyleBasic" TargetType="TreeView">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="BorderBrush" Value="{DynamicResource TitleBarButtons_BorderBrush}" />
    <Setter Property="BorderThickness" Value="0 0 2 0" />
</Style>

<Style x:Key="TreeViewItemStyle_CatNodes" TargetType="{x:Type TextBlock}">
    <Setter Property="Foreground" Value="Snow" />
    <Setter Property="FontFamily" Value="Calibri" />
    <Setter Property="FontSize" Value="16" />
    <Setter Property="FontWeight" Value="Normal" />
    <Setter Property="TextAlignment" Value="Left" />
</Style>

<Style x:Key="TreeViewItemStyle_ChildNodes" TargetType="{x:Type TextBlock}">
    <Setter Property="Foreground" Value="Snow" />
    <Setter Property="FontFamily" Value="Calibri" />
    <Setter Property="FontSize" Value="14" />
    <Setter Property="FontWeight" Value="Normal" />
    <Setter Property="FontStyle" Value="Italic" />
    <Setter Property="TextAlignment" Value="Left" />
</Style>

<DataTemplate x:Key="VolumeInfoDataTemplate">
    <StackPanel Orientation="Horizontal">
        <TextBlock Width="{TemplateBinding Width}"
                   Height="{TemplateBinding Height}"
                   Margin="5"
                   Style="{DynamicResource TreeViewItemStyle_ChildNodes}"
                   Text="{Binding VolumeName}" />
    </StackPanel>
</DataTemplate>

<HierarchicalDataTemplate x:Key="SitesTemplate"
                          ItemsSource="{Binding VolumesList}"
                          ItemTemplate="{StaticResource VolumeInfoDataTemplate}">
    <StackPanel Orientation="Horizontal">
        <TextBlock Width="{TemplateBinding Width}"
                   Height="{TemplateBinding Height}"
                   Margin="5"
                   Style="{DynamicResource TreeViewItemStyle_CatNodes}"
                   Text="{Binding SiteName}" />
    </StackPanel>
</HierarchicalDataTemplate>

xaml 和资源查找上面的工作查找和预期的那样。

我如何使用触发器来扩展我的样式定义,例如处理“IsSelected”事件,以便选定的树节点具有石板灰色边框和浅灰色背景?

研究:Kind of thing I am going for.

更新: TreeView 上没有 IsSelected 属性,但 TreeViewItem 确实定义了一个。

【问题讨论】:

    标签: wpf c#-4.0 .net-4.0 treeview treeviewitem


    【解决方案1】:

    试试这个:

      <DataTemplate x:Key="VolumeInfoDataTemplate"> 
            <StackPanel Orientation="Horizontal"> 
                <TextBlock Width="{TemplateBinding Width}" 
                           Height="{TemplateBinding Height}" 
                           Margin="5" 
                           Style="{DynamicResource TreeViewItemStyle_ChildNodes}" 
                           Text="{Binding VolumeName}"
                           Name="Tb" /> 
            </StackPanel> 
            <DataTemplate.Triggers>
                 <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource    AncestorType=TreeViewItem}}" Value="True">
                      <Setter TargetName="Tb" Property="Background" Value="LightGray"/>
                 </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate> 
    

    【讨论】:

    • 我设法从上面粘贴的链接中获得了其他工作,但我很好奇RelativeSource 标记扩展......你能解释一下这是做什么的吗?
    • 默认情况下,绑定将相对于控件的 DataContext。使用 RelativeSource,您可以指定不同的对象。在此示例中,绑定将搜索 TreeViewItem 类型的第一个父级并检查其 IsSelected 属性。 msdn.microsoft.com/en-us/library/ms743599.aspx
    猜你喜欢
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    相关资源
    最近更新 更多