WPF TreeView:如何为所有树元素添加触发器 [英] WPF TreeView: how to add a trigger for all tree elements

查看:50
本文介绍了WPF TreeView:如何为所有树元素添加触发器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

窗口的右侧包含数据,将其拖动到左侧时,这些项目的颜色变为灰色.我有一个需要隐藏灰色元素的按钮.

The right side of the window contains data, when you drag it to the left, the color of these items turns gray. I have a button that needs to hide gray elements.

图像:数据以灰色突出显示,隐藏按钮被禁用.

图像:数据以灰色突出显示,隐藏按钮处于启用状态,项目被隐藏.

但是,如果我拖动内部treeviewitem,什么也没发生

But, if I drag the inner treeviewitem, nothing happens

图像:拖动内部元素,禁用隐藏按钮

图像:拖动内部元素,启用隐藏按钮

如何更改代码,以便将触发器应用于所有元素?

How can you change the code so that triggers apply to all elements?

TreeView XAML:

TreeView XAML:

 <TreeView
                Grid.Column="2"
                x:Name="RevitCategories">
                <TreeView.ItemContainerStyle>
                    <Style
                        TargetType="TreeViewItem">
                        <EventSetter
                            Event="DragOver"
                            Handler="RevitCategories_OnDragOver" />
                        <EventSetter
                            Event="MouseMove"
                            Handler="RevitCategories_OnMouseMove" />
                        <Style.Triggers>
                            <MultiDataTrigger>
                                <MultiDataTrigger.Conditions>
                                    <Condition
                                        Binding="{Binding Path=ShowUsages, UpdateSourceTrigger=PropertyChanged}"
                                        Value="False" />
                                    <Condition
                                        Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Foreground,
                                        Converter={vm:ColorToHiddenConverter}, UpdateSourceTrigger=PropertyChanged}"
                                        Value="False" />
                                </MultiDataTrigger.Conditions>
                                <Setter
                                    Property="Visibility"
                                    Value="Collapsed" />
                            </MultiDataTrigger>
                        </Style.Triggers>
                    </Style>
                </TreeView.ItemContainerStyle>
                <TreeView.ItemTemplate>
                    <HierarchicalDataTemplate>
                        <TextBlock
                            FontSize="{DynamicResource MediumFontSize}"
                            FontFamily="{DynamicResource FontFamily}" />
                    </HierarchicalDataTemplate>
                </TreeView.ItemTemplate>
            </TreeView>

转换器:

public class ColorToHiddenConverter : MarkupExtension, IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var brush = (Brush) value;
        var colorSample = Colors.Gray;
        return brush.Equal(colorSample);
    }

    public object ConvertBack(object value, Type targetType, object parameter,
        CultureInfo culture) => null;

    public override object ProvideValue(IServiceProvider serviceProvider) => this;
}

推荐答案

已解决:我更改了</TreeView.ItemContainerStyle>到< TreeView.Resources>而且有效

Solved: I changed </TreeView.ItemContainerStyle> to <TreeView.Resources> and it worked

这篇关于WPF TreeView:如何为所有树元素添加触发器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆