2009-02-19 4 views
0

J'essaie de lier IsChecked à la propriété DependancyProperty sélectionnée sur l'objet que j'affiche, ce code semble fonctionner, mais les sous-menus ne s'affichent pas si je l'utilise. Est-ce la bonne façon de procéder, et comment puis-je résoudre le problème?La définition de IsCheckable semble empêcher les sous-menus d'apparaître

<MenuItem Header="Window" Name="windowMenu" ItemsSource="{Binding}"> 
    <MenuItem.ItemContainerStyle> 
     <Style> 
      <Setter Property="MenuItem.IsChecked" Value="{Binding Path=Selected}" /> 
      <Setter Property="MenuItem.IsCheckable" Value="true" /> 
     </Style> 
    </MenuItem.ItemContainerStyle> 
</MenuItem> 

Répondre

0

Un test rapide révèle que si une propriété IsCheckable de MenuItem est définie sur True, il ne sera pas afficher ses éléments enfants.

<Menu> 
     <MenuItem Header="File"> 
      <MenuItem Header="Exit" /> 
     </MenuItem> 
     <MenuItem Header="Tools"> 
      <MenuItem Header="Options" IsCheckable="True"> 
       <MenuItem Header="one" IsCheckable="True" /> 
       <MenuItem Header="two" IsCheckable="True" /> 
      </MenuItem> 
     </MenuItem> 
    </Menu> 

Dans l'exemple ci-dessus, les enfants n'auront pas d'affichage pour les options. Edit: La raison pour laquelle c'est le cas est que du point de vue de l'expérience utilisateur, ce n'est pas un cas qui a vraiment du sens. Le seul cas auquel je peux penser est de vérifier un élément qui vérifie tous ses sous-éléments, mais je suppose que vous feriez mieux d'utiliser des cases à cocher pour cela. Redéfinir ControlTemplate est certainement une option.

Blend peut généralement vous dire quel est le modèle de contrôle par défaut et vous pouvez partir de là.

+0

Quelle est une bonne solution de contournement pour ce problème alors? Je suppose que je peux redéfinir le modèle de contrôle, mais je ne suis pas sûr du modèle par défaut et je ne veux pas en perdre la fonctionnalité. – Eric

+0

Si vous avez fusionné, vous pouvez modifier une copie du modèle de contrôle existant et cracher la définition de modèle par défaut complète. Sinon, vous devrez fouiller dans les bibliothèques WPF pour le trouver. – Adrian

Questions connexes