2009-06-15 7 views
2

J'utilise un TabControl comme espace de travail principal dans une application, et j'aimerais ajouter un élément de menu «Window» qui répertorie les en-têtes des onglets ouverts. L'onglet actif (c'est-à-dire focalisé) doit être vérifié.Liaison TabControl.Items à MenuItem

J'ai essayé d'utiliser un ItemsTemplate comme suit:

  <MenuItem Header="_Window" ItemsSource="{Binding ElementName=ux_workspace, Path=Items}"> 
      <MenuItem.ItemTemplate> 
       <DataTemplate> 
        <MenuItem Header="{Binding Path=Header}" IsCheckable="True" IsChecked="{Binding IsFocused, Mode=OneWay}"> 
       </DataTemplate> 
      </MenuItem.ItemTemplate> 
     </MenuItem> 

Chaque MenuItem est alors « imbriqués », pour ainsi dire, à l'intérieur d'un autre MenuItem, ce qui est vraiment pas le résultat escompté (la case à cocher est dans la zone d'en-tête, et il y a une bordure séparée autour de l'élément interne).

Y a-t-il une meilleure façon de procéder?

Merci d'avance.

Répondre

2

Bien qu'il semble qu'il devrait y avoir une façon de le faire avec des modèles, créer et utiliser un style semble fonctionner:

<Style x:Key="TabMenuItem" TargetType="MenuItem"> 
    <Setter Property="Header" Value="{Binding Path=Header}" /> 
    <Setter Property="IsCheckable" Value="True" /> 
    <Setter Property="IsChecked" Value="{Binding Path=IsFocused, Mode=OneWay}" /> 
</Style> 

<MenuItem Header="_Window" 
    ItemsSource="{Binding ElementName=ux_workspace, Path=Items}" 
    ItemContainerStyle="{StaticResource TabMenuItem}" /> 
+0

Andy - brillant, merci pour votre réponse rapide et efficace. J'ai dû faire un changement à votre code pour soutenir mes buts (enlevé le setter IsCheckable et ajouter un gestionnaire de clic pour focaliser le TabItem approprié) mais autrement cela a fonctionné parfaitement. Je voterais la réponse utile mais je n'ai pas encore assez de réputation (juste un débutant). Merci. – Malcolm

+0

En fait, la réponse correcte est de marquer cette réponse comme acceptée, alors montrez que vous avez trouvé la réponse que vous cherchiez. Cliquez sur la coche sous le nombre de votes pour accepter la réponse. – Andy

+0

Merci, Andy. Newbie frappe à nouveau ...;) – Malcolm

2

Malcolm, vous aurez envie d'utiliser IsSelected au lieu de IsFocused lors de la liaison le MenuItem. Si vous utilisez IsSelected au lieu de IsFocused, vous pouvez également lier IsSelected avec Mode = TwoWay pour ne pas avoir à utiliser un gestionnaire Click pour sélectionner le TabItem approprié.

+0

Merci - cela a très bien fonctionné. – Malcolm

Questions connexes