0

複数のレベルを持つWindows8アプリを設計しています。各レベルには、それぞれスタイルが「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#の背後にあるコードを操作して、各レベルのすべてのボタンのストロークの色を変更することです。つまり、レベル1ボタンのストロークは赤、レベル2ボタンのストロークは緑などです。現在、ストロークはデフォルトでAquamarineに設定されています。

誰かがこれを行う方法について私にアドバイスを与えることができるかどうか疑問に思いました。どんな助けでも大歓迎です。

4

2 に答える 2

0

ジムのアドバイスを使用して問題を解決しました。myStyle の楕円ストロークに templatebinding を適用しました。

<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 に使用します - 他のすべては同じです:

<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 に答える