0

我为我的TreeView风格创建了一个静态应用程序资源。我有一个自定义类型作为分层数据模板类型,我们称之为 Foobar。项目HierarchicalDataTemplate源绑定到 Foobar 的 FooCollection。

自定义对象绑定不是问题。问题是我想TreeViewItem使用触发器更改所选样式的样式。属性IsMouseOver触发器的触发器应该如此。但是我找不到任何地方来触发IsSelected我的属性HierarchicalDataTemplate.Triggers

<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>
4

1 回答 1

0

您可以做的是将IsSelected-property from绑定TreeViewItem到中的相应属性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>

那么你可以使用DataTrigger

<DataTrigger Binding="{Binding IsSelected}" Value="True">
    <DataTrigger.Setters>
        ...
    </DataTrigger.Setters>
</DataTrigger>
于 2018-11-30T21:32:31.880 回答