0 votes

Ajouter et modifier un usercontrol au moment de l'exécution dans une application WPF

Je suis dans la situation suivante, je vais utiliser WPF pour la première fois, donc toute suggestion sur la façon de procéder serait la bienvenue : J'ai un menu déroulant qui, lorsque je sélectionne un élément, doit modifier la structure des contrôles dans la même fenêtre. Les nouveaux contrôles contiennent deux éléments de menu, une zone de texte et une zone de liste. La sélection d'un élément de menu affichera une zone de texte et l'autre une zone de liste. Maintenant, pour chaque élément de la boîte combo initiale, j'aurai des informations différentes pour chaque élément de menu.

Problèmes : Disons que j'ai 10 éléments dans la boîte combo - et 2 éléments de menu pour chacun - donc 20 éléments différents à afficher. -- Comment déclarer ces 20 éléments différents ? -- Comment charger chacun d'entre eux lorsqu'une combinaison particulière est sélectionnée ?

0voto

Ray Burns Points 38537

Si vous souhaitez afficher plusieurs jeux de contrôles en même temps, ajoutez tous les contrôles à votre fenêtre et définissez leur Visibility à l'aide d'une liaison de données, et utiliser le ComboBox pour mettre à jour la propriété à laquelle les contrôles sont liés.

Ou si vous ne souhaitez afficher qu'un seul contrôle à la fois, il vous suffit d'utiliser un DataContext de la ComboBox :

<Window.DataContext>
  <x:Array x:Key="myItems">
    <local:Item MenuItem1="abc" MenuItem2="def" />
    <local:Item MenuItem1="ghi" MenuItem2="jkl" />
    ...
    <local:Item MenuItem1="ghi" MenuItem2="jkl" />
  </x:Array>
</Window.DataContext>

<Grid>
  ...
  <ComboBox x:Name="selection" ItemsSource="{Binding}">
     ...

  <StackPanel DataContext="{Binding /}" ...>
    <MenuItem Header="{Binding MenuItem1}" OnClick="DisplayListBox" />
    <MenuItem Header="{Binding MenuItem2}" OnClick="DisplayTextBox" />
    <TextBox Visibility="Hidden" ... />
    <ListBox Visibility="Hidden" ... />
  </StackPanel>

</Grid>

avec le code approprié pour DisplayListBox et DisplayTextBox

0voto

Muad'Dib Points 14260

Vous devriez consulter ControlTemplate. Vous pouvez définir un ensemble de modèles, puis les appliquer à un contrôle pour qu'ils deviennent ce que vous voulez. Ainsi, lorsque l'événement "item changed" se déclenche sur votre liste déroulante, chargez et appliquez le modèle que vous voulez.

<!--- your xaml file --->
    <Control x:Name="Main"/>

// you CS file....
    OnItemChanage(....)
    {
        if ( Main!= null ) 
        Main.Template = MyNewTemplate;
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X