2012-10-23 1 views
0

Pouvez-vous s'il vous plaît me dire comment changer modèle de contenu quand, en WPF, lorsqu'il est cliqué sur les en-têtes différents Menu Option. J'ai défini le contrôle de l'utilisateur que je peux le mettre comme modèle.Modification du modèle Conent Control dans Menu Item click?

Par exemple: Articles Menu sont: Accueil, joueurs, équipe. Lorsque je clique sur Accueil, je veux que ce modèle spécifique apparaisse dans mon contrôle de contenu, quand je clique sur Joueurs, je veux qu'un autre modèle (liste de joueurs) apparaisse dans le contrôle de contenu comme modèle.

Comment faire avec des déclencheurs dans XAML?

Merci beaucoup :)

Répondre

2

Vous pouvez utiliser un ContentControl pour héberger quel que soit votre contenu et définir le ContentControl.ContentTemplate en fonction de la manière dont vous souhaitez dessiner votre contenu.

Comme exemple très basique,

<ContentControl x:Name="MyContentControl"> 
    <ContentControl.Style> 
     <Style TargetType="{x:Type ContentControl}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding }" Value="Home"> 
        <Setter Property="ContentTemplate"> 
         <Setter.Value> 
          <DataTemplate> 
           <local:MyHomeUsercontrol /> 
          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding }" Value="Players"> 
        <Setter Property="ContentTemplate"> 
         <Setter.Value> 
          <DataTemplate> 
           <local:MyPlayersUsercontrol /> 
          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding }" Value="Team"> 
        <Setter Property="ContentTemplate"> 
         <Setter.Value> 
          <DataTemplate> 
           <local:MyTeamUsercontrol /> 
          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
       </DataTrigger> 
     </Style> 
    </ContentControl.Style> 
</ContentControl> 

Et MenuItem.Click

MyContentControl.Content = "Home"; // or "Players" or "Team" 

Dans cet exemple, je suis sur un string pour la ContentControl.Content, si vous deviez utiliser un objet de classe telle comme HomeViewModel ou PlayersViewModel, votre XAML pourrait être simplifiée pour utiliser des modèles de données implicites, qui sont des modèles qui Habituez automatiquement chaque fois que WPF tente d'établir une classe spécifique

<Window.Resources> 
    <DataTemplate DataType="{x:Type HomeViewModel}"> 
     <local:MyHomeUserControl /> 
    </DataTemplate> 
    <DataTemplate DataType="{x:Type PlayersViewModel}"> 
     <local:MyPlayersUserControl /> 
    </DataTemplate> 
    <DataTemplate DataType="{x:Type TeamViewmModel}"> 
     <local:MyTeamUserControl /> 
    </DataTemplate> 
</Window.Resources> 

<ContentControl x:Name="MyContentControl" /> 

et

MyContentControl.Content = new HomeViewModel(); 
0

Que diriez-vous à l'aide d'un contrôle onglet avec le placement de l'onglet en haut? il serait beaucoup plus propre de cette façon ..

Modifier; Exemple:

<TabControl> 
     <TabItem> 
      <TabItem.Header> 
       <TextBlock Text="Football header!"/> 
      </TabItem.Header> 
      <TabItem.Content> 
       <Button Content="Push for football!"/> 
      </TabItem.Content> 
     </TabItem> 
    </TabControl> 

cela pourrait aussi aider; http://www.switchonthecode.com/tutorials/the-wpf-tab-control-inside-and-out

+0

Ainsi donc au point onglet I définir modèle? – Flipper

+0

Correct, dans votre élément de l'onglet où vous allez mettre votre contenu pour l'en-tête et vous pouvez également utiliser TabHeaderTemplate pour styler votre en-tête si nécessaire. – Steoates

+0

@Flipper voir le code mis à jour, il pourrait faire sens de cette façon – Steoates