如何访问样式资源并检索没有键的内部样式

时间:2013-12-12 14:16:12

标签: c# wpf

我有一个带有键的堆栈面板的样式,在堆栈面板中我有按钮,这些按钮通过堆栈面板的样式>设置了默认样式。资源>样式,因此按钮样式不是通过键设置的,而是设置为它是堆栈面板的子项!我确信理解这一点有点棘手,因为它解释起来确实很棘手......这里是样式代码......

<Style x:Key="VerticalMenuPanel" TargetType="{x:Type StackPanel}">
    <Setter Property="Background" Value="#115e9a" />

    <Style.Resources>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Background" Value="Transparent" />
            <Setter Property="Margin" Value="0,0,0,0" />
            <Setter Property="Foreground" Value="White" />
            <Setter Property="FontSize" Value="13" />
            <Setter Property="FontFamily" Value="Calibri" />
            <Setter Property="FontWeight" Value="Bold" />
            <Setter Property="Height" Value="27" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border BorderBrush="White" BorderThickness="0,0,0,1">
                            <Border BorderBrush="#0160a2" BorderThickness="0,0,0,1.5">                                
                                <ContentPresenter VerticalAlignment="Center" />
                            </Border>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Style.Resources>
</Style>

所以,基本上,如果不进入我正在做的事情,我需要根据某些事件更改堆栈面板中按钮的样式。为了改变风格,我只需根据样式键找到资源!然而,这是我的问题,我无法将样式重置为父素“VerticalMenuPanel”的Style.Resources提供的“默认”样式,因为我不知道如何在没有确定键的情况下检索样式。显而易见的事情是给按钮样式一个键但是我必须明确定义所有按钮的样式而不是默认应用的样式,因为它是堆栈面板的子项!

底线是如何从父样式资源(以编程方式)检索没有键的样式?显然我可以通过它的键检索父样式。

我希望您了解我遇到的问题,如果我能更好地解释,添加更多清晰度或者您希望自己编辑帖子,请随时告诉我:)

1 个答案:

答案 0 :(得分:3)

如果没有为样式提供KeyTargetType将成为该样式的关键。 这是一个例子:

<Grid x:Name="layoutRoot">
    <Grid.Resources>
        <Style TargetType="Button">
            <Setter Property="Width" Value="100" />
        </Style>
    </Grid.Resources>
    <Button />
</Grid>

然后在代码隐藏中,您可以使用Button类型作为资源Key检索默认样式:

Style buttonStyle = layoutRoot.FindResource(typeof(Button)) as Style;