c# - 触发器中无法识别 Setter TargetName 'ContentPresenter'

标签 c# wpf

我有一个 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/

相关文章:

c# - 使用 System.Web.Mvc.RouteAttribute 时 ActionLink 构建错误的 URL

c# - 使用 .AsFactory() 确定运行时类型

c# - Mono Assembly 未解决

c# - 如何简化这段代码?

c# - GridView 验证将整行标记为无效,而不仅仅是单元格

C# 更改所有用户的注册表设置

wpf - 在 WPF 中取消 BeginInvoke

WPF - 如何更改鼠标光标颜色

wpf - 使用数据绑定(bind)获取 TabItem 的索引

c# - 可见性绑定(bind)到模板内的 ListboxItems