简体   繁体   English

分层数据模板触发所选项目属性

[英]Hierarchical data template trigger selected item property

I have created a static application resource for my TreeView style. 我已经为TreeView样式创建了一个静态应用程序资源。 I have a custom type as the hierarchical data template type, let's call it Foobar. 我有一个自定义类型作为分层数据模板类型,我们称之为Foobar。 The HierarchicalDataTemplate items source is bound to the Foobar's FooCollection. HierarchicalDataTemplate项源绑定到Foobar的FooCollection。

The custom object binding is not an issue. 自定义对象绑定不是问题。 Problem is I want to change style of the selected TreeViewItem using triggers. 问题是我想使用触发器更改所选TreeViewItem样式。 The trigger for property IsMouseOver trigger as it should. 属性IsMouseOver触发器应该触发。 But I cannot find anywhere to trigger the property IsSelected in my HierarchicalDataTemplate.Triggers ? 但是我在HierarchicalDataTemplate.Triggers找不到任何地方触发属性IsSelected吗?

<Style TargetType="TreeView" x:Key="TreeView">
    <Setter Property="BorderBrush" Value="{x:Null}"/>
    <Setter Property="Background" Value="#00000000"/>

    <Style.Resources>

        <!--Foobar tree view items-->
        <HierarchicalDataTemplate DataType="{x:Type f:Foobar}" ItemsSource="{Binding FooCollection}">

            <TextBlock Name="tbbName" Text="{Binding Name}" Foreground="#7FFFFFFF" FontSize="16"/>

            <HierarchicalDataTemplate.Triggers>

                <Trigger Property="IsMouseOver" Value="True">
                    <Setter TargetName="tbbName" Property="Effect">
                        <Setter.Value>
                            <DropShadowEffect ShadowDepth="0" Color="#7FFFFFFF" Opacity="1" BlurRadius="20"/>
                        </Setter.Value>
                    </Setter>
                    <Setter TargetName="tbbName" Property="Foreground" Value="#AFFFFFFF"/>
                </Trigger>

            </HierarchicalDataTemplate.Triggers>
        </HierarchicalDataTemplate>
    </Style.Resources>
</Style>

What you can do is binding the IsSelected -property from TreeViewItem to a corresponding property in Foobar 您可以做的是将TreeViewItemIsSelected -property绑定到Foobar的相应属性

class Foobar : INotifyPropertyChanged
{
    ...
    private bool _isSelected;
    public bool IsSelected
    {
        get => _isSelected;
        set
        {
            if(_isSelected == value)
                return;
            _isSelected = value;
            OnPropertyChanged();
        }
    }
    ...
}
<TreeView>
    <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}">
            <Setter Property="IsSelected" Value="{Binding IsSelected}" />
            ...
        </Style>
    </TreeView.ItemContainerStyle>
    ...
</TreeView>

then you can use a DataTrigger 然后您可以使用DataTrigger

<DataTrigger Binding="{Binding IsSelected}" Value="True">
    <DataTrigger.Setters>
        ...
    </DataTrigger.Setters>
</DataTrigger>

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

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