我有一个 ContentPresenter,当按钮被禁用时,内容的不透明度应该变为 0.5,但是 Setter 无法通过 TargetName 找到它。有什么我想念的吗?
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="Tag" Value="MenuButton">
<Setter Property="Background" Value="{StaticResource BackgroundBrush}"/>
<Setter TargetName="ContentPresenter" Property="Opacity" Value="1.0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border BorderThickness="1,0,0,1" Background="{TemplateBinding Background}">
<ContentPresenter
x:Name="ContentPresenter"
Margin="1"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Opacity="1.0"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="{StaticResource DisabledBackgroundBrush}"/>
<Setter TargetName="ContentPresenter" Property="Opacity" Value="0.5"/>
</Trigger>
</Style.Triggers>
</Style>
最佳答案
对于此类问题,您需要了解NameScope
的概念。 Template
定义它自己的 NameScope
。因此,您的 TargetName
无法在模板外部使用。
因此,尝试从 ControlTemplate
内部访问它。
关于c# - 触发器中无法识别 Setter TargetName 'ContentPresenter',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39579359/