2009-03-17 8 views
0

J'ai un menu dans mon application WPF avec plusieurs options qui agissent comme un groupe de boutons radio (en sélectionnant un désélectionne le reste d'entre eux). Je voudrais utiliser des éléments de menu vérifiables comme modèles pour les boutons radio.Est-il possible d'utiliser un MenuItem vérifiable comme modèle de contrôle pour RadioButton?

J'ai essayé de définir le modèle, mais cela ne semble pas fonctionner comme prévu. La sélection et le désélection d'éléments ne semblent pas synchronisés avec les valeurs des boutons radio. Je suppose que je pourrais utiliser un modèle plus complexe et «fausser» la marque sélectionnée en utilisant Path ou quelque chose, mais cela semble énormément de travail pour un objectif aussi simple. Aussi, lorsque j'utilise un modèle plus complexe, je devrais aborder différents thèmes que je préférerais ne pas vouloir faire.

Voici un exemple simple pour illustrer le problème.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Page.Resources> 
    <ControlTemplate x:Key="Template" TargetType="{x:Type RadioButton}">  
     <MenuItem x:Name="item" Header="{TemplateBinding Content}" IsCheckable="True" IsChecked="False" /> 

     <ControlTemplate.Triggers> 
     <Trigger Property="IsChecked" Value="True"> 
      <Setter TargetName="item" Property="IsChecked" Value="True" /> 
     </Trigger> 
     </ControlTemplate.Triggers>  
    </ControlTemplate> 
    </Page.Resources> 

    <StackPanel> 
    <RadioButton Content="Foo" Template="{StaticResource Template}"/> 
    <RadioButton Content="Bar" Template="{StaticResource Template}"/> 
    <RadioButton Content="Biz" Template="{StaticResource Template}"/> 
    </StackPanel> 
</Page> 

Répondre

2

Le problème semble être que les gestionnaires d'événements de la souris de MenuItem ont pris la relève pour la RadioButton. Quand je tournerai IsHitTestVisible sur le MenuItem à faux et a ajouté un Border pour absorber les événements de souris, il a semblé fonctionner comme prévu:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Page.Resources> 
     <ControlTemplate x:Key="Template" TargetType="{x:Type RadioButton}"> 
      <Border Background="Transparent"> 
       <MenuItem Header="{TemplateBinding Content}" IsCheckable="False" IsChecked="{TemplateBinding IsChecked}" IsHitTestVisible="False"/> 
      </Border> 
     </ControlTemplate> 
    </Page.Resources> 
    <StackPanel> 
     <RadioButton Content="Foo" IsChecked="True" Template="{StaticResource Template}"/> 
     <RadioButton Content="Bar" Template="{StaticResource Template}"/> 
     <RadioButton Content="Biz" Template="{StaticResource Template}"/> 
    </StackPanel> 
</Page>