DesignerProperties
はデザインモードか判定に使われるクラスですが、手元の環境で上手く機能しなくなっていたので簡単に調査した結果です。
目次
検証環境
- Visual Studio 2019 (16.7.7 / 16.8.0)
- .NET Framework 4.8
- .NET Core 3.1 / 5.0
内容
使い方
XAML 上で直接デザイン時のみスタイルを変更する場合の例。
<d:DesignerProperties.DesignStyle> <Style TargetType="Window"> <Setter Property="Background" Value="Black"/> </Style> </d:DesignerProperties.DesignStyle>
コードビハインドを使う場合の例。
if (DesignerProperties.GetIsInDesignMode(this)) { this.Background = Brushes.Blue; }
UIエレメントが取得できない場所(ViewModelなど)で使う場合の例。
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue)) { this.Background = Brushes.Red; }
動作確認
WPF (.NET Framework)
.NET Framework の WPF アプリですが、XAMLでの設定は使えますが、コード側からの2パターンは機能しません。判定は有効なようですが、コントロールへの変更が動いてないように見えます。
引き続きコード側で、判定した上で処理する内容を切り替えるといった用途には使えます。
WPF (.NET Core)
.NET Core の WPF アプリですが、XAMLも含めすべてがデザイナには機能しません。 そもそもXAMLで警告が出てしまいます。
.NET Framework 同様コード側での判定処理は使えます。