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;
▼ おまけ : オブジェクト初期化子を使った書き方
new MenuItem()
の かっこ ()
も省略できるんだけど、個人的にはコレがないとちょっと落ち着かない…
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
};
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;