0

s についてかなりのことを学ぼうとすると、特定のテーマに行き詰まりました。作成済みのスタイルを使用して、ボタンのサイズと配置を編集したい。例:

         <Button Style="{StaticResource ButtonFormat}">

        </Button>

ボタンには App.Xaml に保存されたスタイルがあり、スタイルは次のように記述されます。

 <Application.Resources>
    <Style TargetType="Button" x:Key="ButtonFormat">
        <Setter Property="Background" Value="#FF6E1400" />
        <Setter Property="Margin" Value="5,5,5,5" /> 
    </Style>
 <Application.Resources> 

さて、ここに私のジレンマがあります:

「BottomFormat」を上書きする別のスタイルをロードしたい。私はVisualStatemanagerで実験して、これを行う適切な方法を考え出そうとしていますが、それを行う方法について十分に説明するものを実際に見つけることができません.

したがって、以下のようなvisualstateでは:

  <VisualState x:Name="BigView" >
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="550" />
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <!--stuff goes here-->
                    <!--stuff goes here-->
                </VisualState.Setters>
            </VisualState>

ButtonFormatBlue で ButtonFormat を上書きしたい:

        <Style TargetType="Button" x:Key="ButtonFormatBlue ">
        <Setter Property="Background" Value="Blue" />
        <Setter Property="Margin" Value="5,5,5,5" />
    </Style>

visualstatemanagers の代わりに C# を使用することを提案している人を見ましたが、その説明を正しく理解していませんでした。必要に応じて visualstatetrigger からロードすることは可能ですか、それとも間違った方向を見ているのでしょうか?

すべての援助に感謝します、事前に感謝します!

4

2 に答える 2

0

visualstatemanagers の代わりに C# を使用することを提案している人を見ましたが、その説明を正しく理解していませんでした。

Buttonこれは、コード ビハインドでスタイルを手動で設定できることを意味します。たとえば、次のように App リソースに自分ButtonFormatと両方を配置できます。ButtonFormatBlue

<Application.Resources>
    <Style TargetType="Button" x:Key="ButtonFormat">
        <Setter Property="Background" Value="#FF6E1400" />
        <Setter Property="Margin" Value="5,5,5,5" />
    </Style>
    <Style TargetType="Button" x:Key="ButtonFormatBlue">
        <Setter Property="Background" Value="Blue" />
        <Setter Property="Margin" Value="5,5,5,5" />
    </Style>
</Application.Resources>

次に、次を使用してスタイルをButtonロードできます。ButtonFormatStaticResource

<Button x:Name="styleTestButton" Content="Style Sample" Style="{StaticResource ButtonFormat}"
        VerticalAlignment="Bottom" Click="styleTestButton_Click" />

Buttonたとえば、クリック イベントでは、次のように のスタイルを変更できますButton

private void styleTestButton_Click(object sender, RoutedEventArgs e)
{
    var ButtonFormatBlue = Application.Current.Resources.FirstOrDefault(r => r.Key.ToString() == "ButtonFormatBlue");
    styleTestButton.Style = ButtonFormatBlue.Value as Style;
}

または、コード ビハインドで新しいスタイルを完全に定義し、このスタイルをButtonコード ビハインドで C# を使用するように設定することもできます。

private void styleTestButton_Click(object sender, RoutedEventArgs e)
{
    var dynamicStyle = new Style();
    dynamicStyle.TargetType = typeof(Button);
    dynamicStyle.Setters.Add(new Setter(BackgroundProperty, Colors.Blue));
    dynamicStyle.Setters.Add(new Setter(MarginProperty, new Thickness(5, 5, 5, 5)));
    styleTestButton.Style = dynamicStyle;
}

@MZetko が言ったように、リソースをオーバーライドできないことを知っておく必要があります。これが、新しいリソースを作成した理由です。

必要に応じてvisualstatetriggerからロードすることは可能ですか、それとも間違った方向を見ていますか?

はい、可能ですが、間違った方向を見たかどうかを判断するのは困難です。さまざまなシナリオに依存します。たとえば、UIElements が にある場合DataTemplate、それは では機能しませんStateTriggers。このシナリオでは、データ バインディングが最適なソリューションです。VisualStateManager クラスの解説を参照してください。VisualStateManager

于 2016-07-29T06:52:38.720 に答える