1. ホーム
  2. c#

[解決済み] WPFが現在デザインモードで実行されているかどうかを確認する方法はありますか?

2022-04-27 23:11:36

質問

現在、コードがデザインモード(BlendやVisual Studioなど)で実行されているかどうかを確認できるような、グローバルな状態変数をご存知の方はいらっしゃいますか?

以下のような感じでしょうか。

//pseudo code:
if (Application.Current.ExecutingStatus == ExecutingStatus.DesignMode) 
{
    ...
}

私のアプリケーションがExpression Blendのデザインモードで表示されているとき、ViewModelが代わりに"Design Customerクラス"を使用し、その中にデザイナーがデザインモードで表示できるモックデータを持ちたいからです。

しかし、実際にアプリケーションが実行されるときには、もちろん、ViewModel には実際のデータを返す本物の Customer クラスを使用したい。

現在は、デザイナーが作業する前に ViewModel に入り、 "ApplicationDevelopmentMode.Executing" を "ApplicationDevelopmentMode.Designing" に変更することでこれを解決しています。

public CustomersViewModel()
{
    _currentApplicationDevelopmentMode = ApplicationDevelopmentMode.Designing;
}

public ObservableCollection<Customer> GetAll
{
    get
    {
        try
        {
            if (_currentApplicationDevelopmentMode == ApplicationDevelopmentMode.Developing)
            {
                return Customer.GetAll;
            }
            else
            {
                return CustomerDesign.GetAll;
            }
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
}

解決方法は?

あなたが探しているのは GetIsInDesignMode これは、DependencyObjectを取ります。

Ie

// 'this' is your UI element
DesignerProperties.GetIsInDesignMode(this);

編集する Silverlight / WP7 を使用する場合、以下のようになります。 IsInDesignTool から GetIsInDesignMode は、Visual Studio では false を返すことがあります。

DesignerProperties.IsInDesignTool

編集する 最後に、完全を期すために、WinRT / Metro / Windows Storeアプリケーションで同等となるのは DesignModeEnabled :

Windows.ApplicationModel.DesignMode.DesignModeEnabled