2009-03-17 11 views
0

私は、ラジオボタングループのように機能する複数のオプションを持つWPFアプリケーションにメニューを用意しています(それらのオプションの残りの選択を解除する)。チェック可能なメニュー項目をラジオボタンのテンプレートとして使用したいと思います。RadioButtonのコントロールテンプレートとして、チェック可能なMenuItemを使用することはできますか?

私はテンプレートを設定しようとしましたが、期待どおりに動作していないようです。アイテムの選択と選択解除は、ラジオボタンの値と同期していないようです。

私は、より複雑なテンプレートを使用し、Pathや何かを使って選択したマークを "偽造"することができると思いますが、そのような単純な目的のためには非常に多くの作業があります。また、より複雑なテンプレートを使用する場合、私はむしろやりたくないさまざまなテーマに対処しなければなりません。

ここでは、問題を示す簡単な例を示します。

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

答えて

2

問題がMenuItemのマウスイベントハンドラはRadioButtonのために引き継いれたことのようでした。私はMenuItemに偽IsHitTestVisibleを設定し、マウスイベントを満喫するBorderを追加すると、あなたが期待するように動作するように見えた:

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