2009-06-22 6 views
2

Y at-il un moyen simple dans WPF/XAML de basculer entre deux types de contrôles dans la même position dans un panneau? Je me demande s'il existe des solutions de rechange pour changer de visibilités.Basculer entre les contrôles WPF

Dans mon application, j'ai plusieurs cases à cocher qui sont utilisées pour configurer un champ de bits (les cases à cocher permettent d'activer ou de désactiver des bits individuels). Parfois, il est plus facile pour l'utilisateur s'il peut entrer la valeur réelle du champ dans une zone de texte (par exemple 0x03 si les deux premières cases sont cochées).

En raison des contraintes de mise en page, je préférerais ne pas avoir à la fois les cases à cocher et la zone de texte visible en même temps. Je veux fournir un bouton radio qui lui permet de sélectionner quelle "vue" il veut utiliser pour éditer les valeurs.

+0

faire un contrôle personnalisé ou d'un contrôle utilisateur. C'est exactement ce que wpf est le meilleur. –

+0

Pourriez-vous élaborer s'il vous plaît? Est-ce que je mettrais les cases à cocher et la zone de texte dans le contrôle de l'utilisateur, et fournir une méthode publique pour basculer entre les deux? À l'interne, le changement changerait-il de visibilité ou autre chose? Comment est-ce que je pourrais rendre ce contrôle d'utilisateur personnalisé générique afin que je puisse spécifier quels types de contrôles devraient être visibles dans chaque mode, par instance du contrôle d'utilisateur personnalisé? –

+0

En réponse à la réponse de Ray ci-dessous, une autre approche est de le faire via ContentControl + DataTemplates (ou vues) si vous utilisez MVPM ou une architecture similaire. Vous devez créer un PM ou au moins INotifyPropertyChanged/DependencyProperty pour gérer le basculement, mais c'est faisable. – micahtan

Répondre

2

Vous pouvez mettre les deux moyens d'entrée (CheckBoxes/TextBox) dans la même position en les plaçant dans un Panel (par exemple, StackPanel) et en définissant la visibilité de l'ensemble de CheckBoxes ou de TextBox sur Collapsed.

Il existe plusieurs façons d'accomplir cela, mais mon approche préférée consisterait à DataBind le CheckBox et le TextBox à la propriété IsChecked de leur RadioButton respectif et utiliser un IValueConverter pour convertir entre la propriété booléenne et Visibility.

HTH.

0

Utilisez ContentControl comme espace réservé. Le vous pouvez définir ContentControl.Content par programme.

+0

Vous ne voulez pas faire cela - au moins en définissant ContentControl.Content à un FrameworkElement. Si vous utilisiez la route ContentControl, il serait préférable d'utiliser DataTemplates au lieu de remplacer dynamiquement l'interface utilisateur dans la propriété Content. – micahtan

Questions connexes