C# WPF / Style を使ったコードビハインド側でのデザイン動的変更
2024-02-06
普段よくやるやつ
プロパティ代入による変更。
多分一般的
MenuItem _menuItem = new MenuItem();
_menuItem.Header = "ほげ";
_menuItem.FontSize = 12;
_menuItem.Height = 16;
_menuItem.Margin = new Thickness(0);
_menuItem.Padding = new Thickness(0);
_menuItem.InputGestureText = null;
_menuItem.Foreground = System.Windows.Media.Brushes.Blue;
_menuItem.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
↓ こっちはオブジェクト初期化子を使った書き方
MenuItem _newMenuItem = new MenuItem()
{
Header = "ほげ",
FontSize = 12,
Height = 16,
Margin = new Thickness(0),
Padding = new Thickness(0),
InputGestureText = null,
Foreground = System.Windows.Media.Brushes.Blue,
HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch
};
※ new MenuItem()
の かっこ ()
も省略できるんだけど、個人的には無いとちょっと落ち着かない…
system.windows.style 適用による変更
本題
Microsoft Learn - コントロールのスタイルを作成する方法 (WPF .NET)
先ほどのプロパティ代入とは別に、以下も選択肢の一つになりえるかなーと。
xaml 側でリソースとして用意しておくムーブと似たような感じで、
「一度作った Style をコードビハインド上で使いまわす」みたいな応用とか?
MenuItem _menuItem = new MenuItem()
{
Header = "ほげ"
/**
* ↑ のように、ここで書くのもアリだけど
* Style 側で、以下のように後付け割り当ても可
* style.Setters.Add(new Setter(MenuItem.HeaderProperty, "ほげ"));
*/
};
Style style = new Style(typeof(MenuItem));
// ※ 12 や 16 のような int 表記だと例外吐かれました 💦
style.Setters.Add(new Setter(MenuItem.FontSizeProperty, 12.0));
style.Setters.Add(new Setter(MenuItem.HeightProperty, 16.0));
style.Setters.Add(new Setter(MenuItem.MarginProperty, new Thickness(0)));
style.Setters.Add(new Setter(MenuItem.PaddingProperty, new Thickness(0)));
style.Setters.Add(new Setter(MenuItem.InputGestureTextProperty, null));
style.Setters.Add(new Setter(MenuItem.ForegroundProperty, System.Windows.Media.Brushes.Blue));
style.Setters.Add(new Setter(MenuItem.HorizontalAlignmentProperty, System.Windows.HorizontalAlignment.Stretch));
// 割り当て
_menuItem.Style = style;