我收到的错误表明我在 XAML 代码中使用了无效的表达式类型,其标记<!-- Error start -->如下:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:RDictionary="clr-namespace:DLLCustomExtension;assembly=DLLCustomExtension">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary RDictionary:MDExtension.Name="ColorBrushes" Source="Solidbrushes.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style x:Key="PrimaryNavToggleButtons" TargetType="{x:Type ToggleButton}">
<Setter Property="Background" Value="{StaticResource PrimaryNavButtonsBackcolor}" />
<Setter Property="BorderBrush" Value="{x:Null}" />
<Setter Property="Foreground" Value="{StaticResource PrimaryNavButtonsForeground}" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Stretch" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="Margin" Value="3" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}"> <!-- Error start -->
<Border
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
CornerRadius="5">
<Grid>
<ContentPresenter
x:Name="ContentPresenter"
x:Uid="ContentPresenter"
Visibility="Visible" />
<AdornerDecorator />
</Grid>
</Border>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True" />
<Condition Property="IsChecked" Value="False" />
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Background" Value="{StaticResource PrimaryNavButtonHovBackcolor}" />
</MultiTrigger.Setters>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="False" />
<Condition Property="IsChecked" Value="False" />
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Background" Value="{TemplateBinding Background}" />
</MultiTrigger.Setters>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True" />
<Condition Property="IsChecked" Value="True" />
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Background" Value="{StaticResource PrimaryNavButtonHovBackcolor}" />
</MultiTrigger.Setters>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="False" />
<Condition Property="IsChecked" Value="True" />
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Background" Value="{StaticResource PrimaryNavButtonHovBackcolor}" />
</MultiTrigger.Setters>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate> <!-- Error end -->
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)
那么我做错了什么?感谢。
<Setter Property="Background" Value="{TemplateBinding Background}" />
Run Code Online (Sandbox Code Playgroud)
该行会产生错误。TemplateBinding在 ContentTemplate 触发器设置器中不起作用。它应该使用Bindingwith来编写RelativeSource TemplatedParent。
<Setter Property="Background"
Value="{Binding Background, RelativeSource={RelativeSource TemplatedParent}}" />
Run Code Online (Sandbox Code Playgroud)
但是我不明白该行的目的。{TemplateBinding Background}模板部分已经有。为什么要在触发器中重复它?