2009-03-17 7 views
0

Ich habe ein Menü in meiner WPF-Anwendung mit mehreren Optionen, die sich wie eine Optionsfeldgruppe verhalten (durch Auswählen von einem wird die Auswahl aufgehoben). Ich möchte überprüfbare Menüpunkte als Vorlagen für Optionsfelder verwenden.Ist es möglich, ein kontrollierbares MenuItem als Steuerelementvorlage für RadioButton zu verwenden?

Ich habe versucht, die Vorlage zu setzen, aber es scheint nicht zu funktionieren, als man erwarten würde. Das Auswählen und Abwählen von Elementen scheint nicht mit den Werten der Optionsfelder synchronisiert zu sein.

Ich denke, ich könnte komplexere Vorlage verwenden und die ausgewählte Marke mit Pfad oder etwas "fälschen", aber es scheint schrecklich viel Arbeit für so einen einfachen Zweck. Auch wenn ich eine komplexere Vorlage verwende, müsste ich verschiedene Themen ansprechen, die ich lieber nicht machen möchte.

Hier ist ein einfaches Beispiel, um das Problem zu demonstrieren.

<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> 

Antwort

2

Das Problem schien, dass die MenuItem ‚s Maus-Event-Handler für die RadioButton wurden die Übernahme zu sein. Als ich IsHitTestVisible gesetzt auf dem MenuItem zu falsch und hat eine Border Mausereignisse aufzusaugen schien es, als Sie zu arbeiten erwarten:

<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>