【发布时间】: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