繁体   English   中英

在触发器中无法识别Setter TargetName'ContentPresenter'

[英]Setter TargetName 'ContentPresenter' not recognized in Trigger

我有一个ContentPresenter,当Button被禁用时,内容的不透明度应该变为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内部访问它。

您可以使用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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM