回答:
確かにあります:
System.ComponentModel.DesignerProperties.GetIsInDesignMode
例:
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
public class MyUserControl : UserControl
{
public MyUserControl()
{
if (DesignerProperties.GetIsInDesignMode(this))
{
// Design-mode specific functionality
}
}
}
Enable project code
有効にする必要があります(またはメニュー->デザイン->🗹プロジェクトコードの実行)。
場合によっては、非UIクラスの呼び出しがデザイナーによって開始されたかどうか(XAMLからDataContextクラスを作成した場合など)を知る必要があります。次に、このMSDN記事のアプローチが役立ちます。
// Check for design mode.
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue))
{
//in Design mode
}
WinFormsでホストされている WPFコントロールの場合、DesignerProperties.GetIsInDesignMode(this)
機能しません。
そこで、Microsoft Connectにバグを作成し、回避策を追加しました。
public static bool IsInDesignMode()
{
if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Contains( "VisualStudio" ) )
{
return true;
}
return false;
}
GetEntryAssembly()
代わりにすべきではありませんGetExecutingAssembly()
か?後者は、このプロパティが定義されているアセンブリを返す必要があります
遅い答え、私は知っています-しかし、これをDataTrigger
、または一般的にXAMLのどこでも使用したい人のために:
xmlns:componentModel="clr-namespace:System.ComponentModel;assembly=PresentationFramework"
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},
Path=(componentModel:DesignerProperties.IsInDesignMode)}"
Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
これを使用してください:
if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
//design only code here
}
(非同期およびファイル操作はここでは機能しません)
また、XAMLでデザイン時オブジェクトをインスタンス化する(dは特別なデザイナー名前空間)
<Grid d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}">
...
</Grid>
Windows.ApplicationModel
)は、WindowsランタイムAPIに含まれているストアアプリ用です。通常のWindowsデスクトップアプリケーションで作業しているだけの場合、これはすぐに使用できるWPFソリューションではありません。