我有一个ContentPresenter,当Button被禁用时,内容的不透明度应该变为0.5,但是Setter无法通过TargetName找到它。有什么我想念的吗?
git status
答案 0 :(得分:2)
对于此类问题,您需要了解NameScope
的概念。 Template
定义了自己的NameScope
。因此,您的TargetName
无法在模板外部使用。
因此,请尝试从ControlTemplate
内部访问它。
答案 1 :(得分:1)
您可以使用ControlTemplate.Triggers
通过Setters更改ContentPresenter
属性。 “ContentPresenter”名称仅在模板中已知。
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="Tag" Value="MenuButton">
<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.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="{StaticResource DisabledBackgroundBrush}"/>
<Setter TargetName="ContentPresenter" Property="Opacity" Value="0.5"/>
</Trigger>
<Trigger Property="IsEnabled" Value="True">
<Setter Property="Background" Value="{StaticResource BackgroundBrush}"/>
<Setter TargetName="ContentPresenter" Property="Opacity" Value="1"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>