使用其名称从基于它的样式访问样式 ControlTemplate 中的元素

问题描述 投票:0回答:1

我有一个按钮的样式,比如 ButtonStyle,里面有 VisualStates、属性和触发器。我有另一种基于 ButtonStyle 的样式。我需要访问 BasedOn 样式内名为“OnhoverGrid”的元素,以更改其属性。 ButtonStyle 中的 ControlTemplate 包含许多元素及其设置器。我无法使用从现有 ControlTemplate 复制的代码为 BasedOn 样式设置新模板。有没有办法可以从 BasedOn 样式触发器内部访问元素 OnhoverGrid?这是样式的示例片段。

 <Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Grid x:Name="RootGrid" SnapsToDevicePixels="True">
                        <Grid x:Name="OnhoverGrid" Opacity="0" Background="Blue">
                            <TextBlock Text="{TemplateBinding Content}"></TextBlock>
                        </Grid>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="OnhoverGrid" Property="Opacity" Value="1" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

<Style BasedOn="{StaticResource ButtonStyle}" TargetType="{x:Type Button}">
        <Setter Property="Foreground" Value="Black"/>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter TargetName="OnhoverGrid" Property="Background" Value="Red" /><!-- Unable to access on OnhoverGrid-->
            </Trigger>
        </Style.Triggers>
    </Style>
wpf xaml controltemplate
1个回答
0
投票

我也遇到这个问题了,请问你解决了吗?

© www.soinside.com 2019 - 2024. All rights reserved.