通过c#编辑资源字典样式

时间:2013-01-13 00:05:35

标签: c# windows-8 styles microsoft-metro

我正在设计一个具有多个级别的Windows 8应用程序。每个级别都有许多按钮,每个按钮都带有'myStyle'样式。

<Style x:Key="myStyle" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Ellipse StrokeThickness="4" Width="55" Height="55" Stroke="Aquamarine">
                        <Ellipse.Fill>
                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                <GradientStop Color="GreenYellow"/>
                                <GradientStop Color="#FF1E46FB" Offset=".5"/>
                                <GradientStop Color="GreenYellow" Offset="1"/>
                            </LinearGradientBrush>
                        </Ellipse.Fill>
                    </Ellipse>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

我要做的是操纵c#中的代码来改变每个级别中所有按钮的笔触颜色。即Level1按钮有红色笔划,Level2按钮有绿色笔划等...目前我默认在Aquamarine设置笔划。

我想知道是否有人可以就如何做到这一点给我任何建议。任何帮助都将非常感激。

2 个答案:

答案 0 :(得分:0)

鉴于评论,我认为这应该适合你。在你的模板中,将它用于Ellipse,而不是现在的 - 其他一切都是相同的:

<Ellipse StrokeThickness="4" Width="55" Height="55" Stroke="{TemplateBinding BorderBrush}">

然后,您可以在按钮中将颜色分别指定给按钮,例如:

    <Button x:Name="b1" Style="{StaticResource myStyle}" BorderBrush="Red">Level 1 Button</Button>
    <Button x:Name="b2" Style="{StaticResource myStyle}" BorderBrush="Green">Level 2 Button</Button>

或者,您可以对Ellipse进行相同的更改,并根据主要样式添加其他样式,例如:

    <Style x:Key="Level1" BasedOn="{StaticResource myStyle}" TargetType="Button">
        <Setter Property="BorderBrush" Value="Red" />
    </Style>

    <Style x:Key="Level2" BasedOn="{StaticResource myStyle}" TargetType="Button">
        <Setter Property="BorderBrush" Value="Green" />
    </Style>

然后你的按钮看起来像:

   <Button x:Name="b1" Style="{StaticResource Level1}">Level 1 Button</Button>
   <Button x:Name="b2" Style="{StaticResource Level2}">Level 2 Button</Button>

答案 1 :(得分:0)

使用你的建议Jim解决了我的问题。在myStyle中将模板绑定应用到我的椭圆描边:

<Style x:Key="myStyle" TargetType="Button">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Grid>
                            <Ellipse Stroke="{TemplateBinding Foreground}" RenderTransformOrigin="0.5,0.5" StrokeThickness="3" Width="55" Height="55" Margin="2.5">
                                <Ellipse.Fill>
                                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                        <GradientStop Color="White"/>
                                        <GradientStop Color="White" Offset="1"/>
                                        <GradientStop Color="#FF9FA4A4" Offset="0.5"/>
                                    </LinearGradientBrush>
                                </Ellipse.Fill>
                            </Ellipse>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

然后在级别加载时使用foreach循环设置所有按钮(挂钩)的前景。

foreach (Control p in Globals.allPegList)
        {
            p.Foreground = new SolidColorBrush(Globals.color1);
        }

感谢您的帮助!

ps:Globals只是一个命名空间,我声明了一些全局变量。 color1是一个Color变量。 allPegList是每个级别中所有按钮(挂钩)的列表。