Ist es möglich, eine überprüfbare MenuItem als Steuervorlage für RadioButton- zu benutzen?

StackOverflow https://stackoverflow.com/questions/654074

Frage

Ich habe ein Menü in meiner WPF-Anwendung mit mehreren Optionen, die wie eine Optionsfeld-Gruppe handeln (die Auswahl einer Abwahl Rest von ihnen). Ich möchte überprüfbar Menüpunkte als Vorlagen für die Radio-Buttons verwenden.

Ich habe versucht, die Vorlage zu setzen, aber es scheint nicht zu funktionieren, wie man erwarten würde. Auswählen und Abwählen Elemente scheinen nicht mit Radio-Buttons' Wert synchronisiert werden.

Ich glaube, ich komplexere Vorlage verwenden könnte und „fake“ die gewählte Markierung mit Pfad oder etwas, aber es scheint furchtbar viel Arbeit für einen solchen einfachen Zweck. Auch wenn komplexere Vorlage würde ich zu verschiedenen Themen befassen, die ich lieber nicht tun will.

Hier ist ein einfaches Beispiel, 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>
War es hilfreich?

Lösung

Das Problem schien zu sein, dass die Maus-Event-Handler des MenuItem wurden für die RadioButton übernehmen. Als ich IsHitTestVisible auf dem MenuItem auf false gesetzt und hat eine Border Mausereignisse zu genießen, es schien, 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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top