2012-01-25 19 views
6

Esta pregunta me molesta desde hace mucho tiempo: ¿Puedo tener una condición que sea verdadera si el diseñador de Visual Studio la está ejecutando y falsa de lo contrario?Visual Studio: Condición "if (InDesigner)"

Por ejemplo (WPF), I desea utilizar un BoolToVisibilityConverter especial de obligar a la propiedad de visibilidad de algunos controles al ratón ser más que el control. Lo hago con el siguiente código 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}}" /> 

Esto hace que los elementos no sean visibles en la vista del diseñador de Visual Studio. ¿Hay una manera de decirle al convertidor algo como esto:

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

Respuesta

9

Puede utilizar el System.ComponentModel.DesignerProperties.GetIsInDesignMode() método:

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

En Blend o Visual Studio (no estoy seguro de cuál era), esto siempre será falso, por lo que también debe incluir la siguiente comprobación:

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

Esto funciona porque en el programa en ejecución Application.Current siempre será su propia clase de aplicaciones derivado (por defecto: App, definido en App.xaml y App.xaml.cs respectivamente)

+0

funciona como un encanto, sobre todo en mis BoolToVisibilityConverters. ¡Muchas gracias! – Akku

+0

+1! ¡Finalmente, algo que funciona! GetIsInDesignMode comenzó a devolver falso, pero su último control dio el truco, ¡gracias! –

3

Para una aplicación de WPF que podría intentar algo como lo siguiente:

 if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue)) 
     { 
      // If we're here it's the design mode 
     } 
Cuestiones relacionadas