とにかくプログラムでスタイルをオフにする方法はありますか?
例として、すべてのテキストボックスにリンクされているスタイルがあります
<Style TargetType="{x:Type TextBox}">
実際に使用されているスタイル要素を停止するためのコードを追加したいので、基本的にデフォルトのコントロールスタイルに戻します。
スタイルを切り替える方法が必要です。C#コードを使用して、Windowsのデフォルトスタイルとカスタムスタイルを切り替えることができます。
とにかくこれを行うにはありますか?
ありがとう
実用的なソリューション
スタイルをデフォルトに設定するには、
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);
}
他のスタイルよりも優先される空白のスタイルを挿入できます。そのようです:
<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) });
答えが受け入れられたのはわかっていますが、次のシナリオでうまく機能するソリューションを追加したいと思います。
ユーザーコントロールルートでリソースを設定します。
<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>内のコントロールにメインアプリケーションスタイルが正常に適用されます
Xamlでは、スタイルを明示的に設定することでこれをオーバーライドできます。コードビハインドでは、スタイルを明示的に設定することもできます。
<TextBox Style="{StaticResource SomeOtherStyle}"/>
myTextBox.Style = Application.Resources["SomeOtherStyle"];