2017-07-28 1 views
0

Je suis en train de concevoir un formulaire pour un modèle de support complexe dans WPF. Certains des contrôles de formulaire reposent sur plusieurs options sont définies sur le modèle de vue sous-jacente, donc j'ai mis en place par exempleDéfinir/ignorer explicitement la visibilité à la conception dans VS2013?

<TextBlock.Visibility> 
    <MultiBinding Converter="{StaticResource AndMultiValueVisibilityConverter}"> 
    <Binding Path="RelevantSystemOption" /> 
    <Binding Path="RelevantLicenseKeyOption"/> 
    </MultiBinding> 
</TextBlock.Visibility> 

AndMultiValueVisibilityConverter prend booléens et ne fait quelque chose de visible si elles sont toutes vraies, pour référence.

Ceci permet de désactiver la visibilité du contrôle au moment de la conception, ce que je ne souhaite pas.

Je connais la capacité de Expression Blend and design-time attributes à effectuer certaines déterminations de mise en page qui peuvent être ignorées lors de l'exécution. d: IsHidden n'est pas respecté et d: LayoutOverrides ne fonctionne pas sur Visibility car il s'agit d'une propriété dynamique.

Je préfère ne pas mettre en place un modèle de sauvegarde complet avec d: DataContext. Je le ferai si je le dois, mais existe-t-il un moyen plus simple de forcer ce contrôle particulier et peut-être une poignée d'autres à être toujours visibles au moment du design?

+0

utilisation 'DesignerProperties.GetIsInDesignMode (nouveau DependencyObject())' dans votre convertisseur de valeurs multiples. – Will

+0

Oui, ça marche bien. Vouliez-vous dire que c'était un commentaire? – Glazius

+0

Je l'aurais fermé comme un doublon (ce qui est parfaitement bien et normal) si je pouvais trouver une question canonique décent, mais je ne peux pas. Alors, réponds-moi. – Will

Répondre

1

Il suffit d'utiliser

DesignerProperties.GetIsInDesignMode(new DependencyObject()) 

dans votre convertisseur de valeurs multiples pour déterminer si vous êtes dans le concepteur et, le cas échéant, le retour vrai.

Il est acceptable de l'utiliser dans un convertisseur dans une application MVVM, si vous pensez que cela pourrait aller à l'encontre du modèle. Le convertisseur est une préoccupation de l'interface utilisateur.

https://msdn.microsoft.com/en-us/library/system.componentmodel.designerproperties(v=vs.110).aspx