0

我正在设计一个具有多个级别的 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。

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

4

2 回答 2

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 是一个颜色变量。allPegList 是我在每个级别中的所有按钮(钉)的列表。

于 2013-01-14T01:16:22.957 回答
0

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

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

然后,您可以在将按钮包含在 UI 中时单独为按钮分配颜色,例如:

    <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>
于 2013-01-13T04:00:27.290 回答