web-dev-qa-db-ja.com

WPF XAMLでスタイルを無効にしますか?

とにかくプログラムでスタイルをオフにする方法はありますか?

例として、すべてのテキストボックスにリンクされているスタイルがあります

<Style TargetType="{x:Type TextBox}">

実際に使用されているスタイル要素を停止するためのコードを追加したいので、基本的にデフォルトのコントロールスタイルに戻します。

スタイルを切り替える方法が必要です。C#コードを使用して、Windowsのデフォルトスタイルとカスタムスタイルを切り替えることができます。

とにかくこれを行うにはありますか?

ありがとう

実用的なソリューション

WPFでのテーマの切り替え

28
Sandeep Bansal

スタイルをデフォルトに設定するには、

XAMlの使用では、

<TextBox Style="{x:Null}" />

C#では、

myTextBox.Style = null;

複数のリソースでスタイルをnullに設定する必要がある場合は、CodeNaked's応答を参照してください。


私は、すべての追加情報はコメントではなく質問にあるべきだと思います。とにかく、コードビハインドでは、これはあなたが達成しようとしていることだと思います:

Style myStyle = (Style)Application.Current.Resources["myStyleName"];

public void SetDefaultStyle()
{
    if(Application.Current.Resources.Contains(typeof(TextBox)))
        Application.Current.Resources.Remove(typeof(TextBox));

    Application.Current.Resources.Add(typeof(TextBox),      
                                      new Style() { TargetType = typeof(TextBox) });
}

public void SetCustomStyle()
{
    if (Application.Current.Resources.Contains(typeof(TextBox)))
        Application.Current.Resources.Remove(typeof(TextBox));

    Application.Current.Resources.Add(typeof(TextBox), 
                                      myStyle);
}
63
loxxy

他のスタイルよりも優先される空白のスタイルを挿入できます。そのようです:

<Window>
    <Window.Resources>
        <Style TargetType="TextBox">
            <Setter Property="Background" Value="Red" />
        </Style>
    </Window.Resources>
    <Grid>
        <Grid.Resources>
            <Style TargetType="TextBox" />
        </Grid.Resources>
    </Grid>
</Window>

上記の例では、グリッドの暗黙的なスタイルのみがグリッド内のTextBoxに適用されます。これをプログラムでグリッドに追加することもできます。

this.grid.Resources.Add(typeof(TextBox), new Style() { TargetType = typeof(TextBox) });
20
CodeNaked

答えが受け入れられたのはわかっていますが、次のシナリオでうまく機能するソリューションを追加したいと思います。

  • Mahapps.metroを使用する1つのメインアプリケーション
  • mahapps.metroを参照せずにメインアプリケーションからインポートされた追加プロジェクト。プラグインとしてインポートされます(コンパイルされた.dllをオンザフライでロード)
  • <ToolBar>を使用すると、すべてのスタイルがnullに変更されるため、mahapps.metroスタイルはツールバー内のアイテムに適用されません。
  • usercontrolは、メインアプリケーションにカスタムコントロールを提供するために使用されます。

ユーザーコントロールルートでリソースを設定します。

<UserControl.Resources>
    <Style x:Key="ButtonStyle" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}" />
    <Style x:Key="ComboBoxStyle" TargetType="ComboBox" BasedOn="{StaticResource {x:Type ComboBox}}" />
</UserControl.Resources>

ツールバーのコードは次のようになります

                <ToolBar>
                    Block Template:
                    <ComboBox Style="{StaticResource ComboBoxStyle}"/>
                    <Button Content="Generate!" Style="{StaticResource ButtonStyle}"/>
                </ToolBar>

これにより、<ToolBar>内のコントロールにメインアプリケーションスタイルが正常に適用されます

3
impoetk

Xamlでは、スタイルを明示的に設定することでこれをオーバーライドできます。コードビハインドでは、スタイルを明示的に設定することもできます。

<TextBox Style="{StaticResource SomeOtherStyle}"/>

myTextBox.Style = Application.Resources["SomeOtherStyle"];
1
Ed Bayiates