2012-01-25 2 views
6

Cette question me bogue depuis longtemps: Puis-je avoir une condition qui est vraie si le concepteur Visual Studio l'exécute, et false sinon?Visual Studio: Condition "si (InDesigner)"

Par exemple (WPF), je veux utiliser un BoolToVisibilityConverter spécial pour lier la propriété de visibilité de certains contrôles à la souris étant sur ce contrôle. Je le fais avec le code XAML suivant:

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

Cela conduit aux éléments n'étant pas visibles dans la vue de concepteur de Visual Studio. Est-il possible de dire quelque chose Converter comme ceci:

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

Répondre

9

Vous pouvez utiliser la méthode 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 

Dans Blend ou Visual Studio (je ne suis pas sûr de laquelle il s'agissait), ce sera toujours faux, donc vous devriez également inclure la vérification suivante:

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

Cela fonctionne parce que dans le programme en cours Application.Current sera toujours votre propre classe dérivée d'application (par défaut: App, définis dans App.xaml et App.xaml.cs respectivement)

+0

fonctionne comme un charme, en particulier dans mes BoolToVisibilityConverters. Merci beaucoup! – Akku

+0

+1! Enfin, quelque chose qui fonctionne! GetIsInDesignMode a commencé à retourner false mais votre dernière vérification a fait l'affaire, merci! –

3

Pour une application WPF, vous pouvez essayer quelque chose comme ce qui suit:

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