【问题标题】:WPF - Modify button's ellipse object from that button's trigger in XAMLWPF - 从 XAML 中该按钮的触发器修改按钮的椭圆对象
【发布时间】:2015-03-08 11:28:22
【问题描述】:

我是 WPF 和 XAML 的新手。这个问题很直接。

我想在按下按钮时将触发器中椭圆的 Fill 属性从默认的“#597E0000”修改为“Black”。显然我没有正确访问该属性,因为我无法编译它并在下面代码中指示的行上获得以下内容:

“无法在样式设置器上设置 TargetName 属性。第 16 行”

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="ExitButton" TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate x:Name="exitButtonTemplate" TargetType="Button">
                <Grid>
                    <Ellipse x:Name="exitButtonEllipse" Fill="#597E0000"/>
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsPressed" Value="True">
            <Setter TargetName="exitButtonEllipse" Property="Fill" Value="Black" /> <!-- error -->
        </Trigger>
    </Style.Triggers>
</Style>

【问题讨论】:

    标签: .net wpf xaml button


    【解决方案1】:

    如果您在 ControlTemplate 中定义触发器,则您可以访问 ControlTemplate 中的元素。

    另见ControlTemplate.Triggers Property

    <Style x:Key="ExitButton" TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate x:Name="exitButtonTemplate" TargetType="Button">
                    <Grid>
                        <Ellipse x:Name="exitButtonEllipse" Fill="#597E0000"/>
                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsPressed" Value="True">
                            <Setter TargetName="exitButtonEllipse" Property="Fill" Value="Black" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    

    【讨论】:

    • 我明白了,谢谢。另外,我如何从该样式之外访问 ExitButton.exitButtonTemplate.exitButtonEllipse.Fill 属性,例如,另一种样式?
    • 实际上,在我采取行动后,上面的代码在 处给了我一个错误,并给了我这个错误:“附加属性 'Style.Triggers' 未在 'ControlTemplate' 上定义或它的基类之一。”
    • 我清理了 XAML 代码。 &lt;Style.Triggers&gt; 已删除,并移至 &lt;ControlTemplate.Triggers&gt;。可以复制粘贴代码再运行吗?
    • 完美运行!我不知道控制模板也可以有触发器:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多