WPFにはDesignModeプロパティがありますか?


回答:


152

確かにあります

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
        }
    }
}

私のアプリケーションにソリューションを適用しましたが、機能しません。ここで、stackoverflow.com / questions / 3987439 / …と尋ねました。よろしければ、ぜひご参加ください。
Nam G VU

@serhioそれを指摘してくれてありがとう。回避策を知っていますか?ところで、Silverlightでも機能しないようです。connect.microsoft.com
Enrico Campidoglio

VS2019では、スイッチをEnable project code有効にする必要があります(またはメニュー->デザイン->🗹プロジェクトコードの実行)。
marbel82

47

場合によっては、非UIクラスの呼び出しがデザイナーによって開始されたかどうか(XAMLからDataContextクラスを作成した場合など)を知る必要があります。次に、このMSDN記事のアプローチが役立ちます。

// Check for design mode. 
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue)) 
{
    //in Design mode
}

私のアプリケーションにソリューションを適用しましたが、機能しません。ここで、stackoverflow.com / questions / 3987439 / …と尋ねました。よろしければ、ぜひご参加ください。
Nam G VU

20

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()か?後者は、このプロパティが定義されているアセンブリを返す必要があります
fjch1997

7

遅い答え、私は知っています-しかし、これを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>

0

これを使用してください:

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ソリューションではありません。
qJake 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.