Visual Studio: условие «если (InDesigner)» - PullRequest
6 голосов
/ 25 января 2012

Этот вопрос меня долго мучает: Могу ли я иметь условие, которое истинно, если дизайнер Visual Studio выполняет его, и ложно в противном случае?

Например, (WPF), я хочу использовать специальный BoolToVisibilityConverter, чтобы привязать свойство видимости некоторых элементов управления к мыши, находящейся над этим элементом управления. Я делаю это с помощью следующего кода XAML:

<Image Width="50" Height="50" Source="../Images/MB_0010_tasks.ico" Margin="12,133,133,12" MouseLeftButtonUp="Image_MouseLeftButtonUp" 
          Visibility="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}, Path=IsMouseOver, Converter={StaticResource __boolToVisibilityConverter}}" />

Это приводит к тому, что элементы не отображаются в представлении конструктора Visual Studio. Есть ли способ сказать конвертеру что-то вроде этого:

#if DESIGNER
return Visibility.Visible;
#endif
return b ? Visibility.Visible : Visibility.Hidden;

Ответы [ 2 ]

9 голосов
/ 25 января 2012

Вы можете использовать метод System.ComponentModel.DesignerProperties.GetIsInDesignMode():

// In WPF:
var isDesign = DesignerProperties.GetIsInDesignMode(Application.Current.MainWindow);

// In Silverlight:
var isDesign = DesignerProperties.GetIsInDesignMode(Application.Current.RootVisual);

if(isDesign)
{
    // designer code
    return;
}

// non designer code

В Blend или Visual Studio (я не уверен, какой это был) это всегда будет ложным, поэтому вы должны также включитьследующая проверка:

isDesign = isDesign || Application.Current.GetType().Equals(typeof(Application));

Это работает, потому что в работающей программе Application.Current всегда будет вашим собственным производным классом Application (по умолчанию: App, определенным в App.xaml и App.xaml.cs соответственно) * +1010 *

3 голосов
/ 25 января 2012

Для приложения WPF вы можете попробовать что-то вроде следующего:

        if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue))
        {
            // If we're here it's the design mode
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...