【问题标题】:WPF TreeView: how to add a trigger for all tree elementsWPF TreeView:如何为所有树元素添加触发器
【发布时间】:2021-03-11 15:13:50
【问题描述】:

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

Image: The data is highlighted in gray, the hide button is disabled.

Image: The data is highlighted in gray, the hide button is enable, the item is hidden.

但是,如果我拖动内部 treeviewitem,什么都不会发生

Image: Inner element is dragged, the hide button is disable

Image: Inner element is dragged, the hide button is enable

如何更改代码以使触发器适用于所有元素?

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;
}

【问题讨论】:

  • 添加 RelativeSource 并指定包含 ShowUsages 属性的类或添加 ElementName 并将其引用到 CheckBox(给 CheckBox 一个名称)
  • @gadnandev 绑定到复选框没有问题,绑定到非根树视图项的前台属性有问题

标签: c# .net wpf triggers binding


【解决方案1】:

已解决:我将 更改为 并且有效

【讨论】:

    猜你喜欢
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    相关资源
    最近更新 更多