TreeView.IsSelected触发器无法正常工作

Vic*_*lin 2 wpf treeview triggers itemtemplate

我试图在TreeView中更改SelectedItem模板.我按照描述在Style.Triggers中编写了简单的容器样式并更改了项目模板

[1]:如何使用某种颜色突出显示树视图所选项目?要么

[2]:WPF TreeView:如何设置带有圆角的选定项目,如在资源管理器中,但它不起作用.

然后我创建了一个新项目,并使用简单的样式和模板创建了TreeView

<TreeView>
        <TreeViewItem Header="Item1" />
        <TreeViewItem Header="Item2" />
        <TreeViewItem Header="Item3"/>

        <TreeView.Resources>
            <DataTemplate DataType="{x:Type TreeViewItem}" x:Key="selectedTemplate">
                <StackPanel Height="25">
                    <TextBlock Text="SelectedItem"/>
                </StackPanel>
            </DataTemplate>
        </TreeView.Resources>

        <TreeView.ItemContainerStyle>
            <Style TargetType="TreeViewItem">
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="FontWeight" Value="Bold"/>
                        <Setter Property="FontStyle" Value="Italic"/>
                        <Setter Property="Foreground" Value="Red"/>
                        <Setter Property="Background" Value="Green"/>
                        <Setter Property="ItemTemplate" Value="{StaticResource selectedTemplate}"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </TreeView.ItemContainerStyle>
    </TreeView>
Run Code Online (Sandbox Code Playgroud)

所以,然后我在树视图中选择了TreeViewItem,FontWeight,FontStyle和Foreground都被更改了,但是Background和ItemTemplate没有改变.

结果: 这里

你能解释这个奇怪的行为吗?

ice*_*bat 5

ItemTemplate属性影响子元素,而不影响项目本身.并且背景设置为默认选择背景,用于Border装饰内容,因此下方的绿色不可见.你可以实现这样的目标:

 <TreeView>
        <TreeViewItem Header="Item1" />
        <TreeViewItem Header="Item2" />
        <TreeViewItem Header="Item3"/>

        <TreeView.Resources>
            <ControlTemplate TargetType="{x:Type TreeViewItem}" x:Key="selectedTemplate">
                <StackPanel Height="25">
                    <TextBlock Text="SelectedItem" Background="{TemplateBinding Background}" />
                </StackPanel>
            </ControlTemplate>
        </TreeView.Resources>

        <TreeView.ItemContainerStyle>
            <Style TargetType="TreeViewItem">
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="FontWeight" Value="Bold"/>
                        <Setter Property="FontStyle" Value="Italic"/>
                        <Setter Property="Foreground" Value="Red"/>
                        <Setter Property="Background" Value="Green"/>
                        <Setter Property="Template" Value="{StaticResource selectedTemplate}"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </TreeView.ItemContainerStyle>
    </TreeView>
Run Code Online (Sandbox Code Playgroud)