2009-11-18 4 views
0

J'ai une situation comme suit, je vais utiliser WPF pour la première fois, donc toute suggestion sur la façon de procéder devrait être géniale: J'ai un menu déroulant, quand Je choisis n'importe quel élément de lui - il devrait changer la structure des contrôles dans la même fenêtre. Les nouveaux contrôles contiennent - deux éléments de menu et une zone de texte et une zone de liste. La sélection d'un menuitem affichera une zone de texte et d'autres afficheront la zone de liste. Maintenant, pour chaque élément dans la zone de liste déroulante initiale, j'aurai des informations différentes pour chaque élément du menu.Ajouter et modifier usercontrol à l'exécution dans une application WPF

Problèmes: Dites que j'ai 10 éléments dans la zone de liste déroulante - et 2 éléments de menu pour chacun - donc 20 choses différentes à afficher. - Comment dois-je déclarer ces 20 étoffes différentes - Comment dois-je charger chaque lorsqu'une combinaison particulière est sélectionnée

Répondre

0

Si vous souhaitez afficher plusieurs séries de contrôles à la fois, dd tous les contrôles de votre fenêtre et définissez leur Visibility en utilisant une liaison de données et utilisez le ComboBox pour mettre à jour la propriété à laquelle les contrôles sont liés.

Ou si vous voulez seulement afficher un contrôle à la fois, il suffit d'utiliser un DataContext de la zone de liste déroulante:

<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

0

Vous devriez regarder ControlTemplate. Vous pouvez définir un ensemble de modèles, puis les appliquer à un contrôle en les faisant correspondre à ce que vous voulez qu'ils soient. Ainsi, lorsque l'élément a changé d'événement 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; 
    }