基于父属性更改MultiDataTrigger条件中控件的背景



我试图根据父控件的IsSelected属性,以不同的方式设置Button的背景。我目前拥有的:我有一个ListBoxItem,它包含一个包含Button(或更多(的ContentControl。我想根据ListBoxItemIsSelected属性设置Button的背景。

这是我认为会很好的代码:

<ControlTemplate TargetType="{x:Type ListBoxItem}">
<ControlTemplate.Resources>
<ControlTemplate x:Key="DefaultOperationsField" TargetType="{x:Type ContentControl}">
<Button
Grid.Column="1"
Style="{StaticResource DiscardButtonStyle}"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Margin="5"
Command="{Binding DiscardFixtureChangesCommand}"
ToolTip="Discard changes">
</Button>
</ControlTemplate>
<ControlTemplate.Resources>
...
<ContentControl x:Name="Operations" Content="{Binding}" Template="{StaticResource DefaultOperationsField}"/>
...
</ControlTemplate>

我有Button:的时间表

<Style x:Key="DiscardButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="border" Background="Transparent" CornerRadius="3">
<Image Source="{StaticResource Discard}" VerticalAlignment="Center" Margin="7"/>
</Border>
<ControlTemplate.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True" />
<Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=ListBoxItem}}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter TargetName="border" Property="Background" Value="{StaticResource FixtureListItemBackgroundBrush}"/>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True" />
<Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=ListBoxItem}}" Value="False" />
</MultiDataTrigger.Conditions>
<Setter TargetName="border" Property="Background" Value="{StaticResource ApplicationSelectionBorderBrush}"/>
</MultiDataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

但是,这会导致运行时错误,并显示以下消息:

InvalidOperationException: Must have non-null value for 'Binding'.

如何根据祖先控件的属性更改Button的背景?

如果您使用的是MultiDataTriggers,则每个Condition都必须有一个与Binding属性相关的值。在我的情况下,我选择Binding属性作为第一个Condition:

<MultiDataTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True" />
<Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=ListBoxItem}}" Value="True" />
</MultiDataTrigger.Conditions>

因此CCD_ 16。如果你想绑定到你的正常属性-就像你在正常情况下所做的那样,比如:

<Trigger Property="IsMouseOver" Value="True">

在使用MultiDataTriggers的情况下,它不起作用。只需将此处的Trigger部分更改为Condition,将Property更改为适当的Binding,它就会起作用。在我的情况下,这非常好:

<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsMouseOver, ElementName=border}" Value="True" />
<Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=ListBoxItem}}" Value="True" />
</MultiDataTrigger.Conditions>

最新更新