2013-02-20 9 views
14

メニュー項目にラジオボタンを追加したいと思います。ラジオボタンをメニュー項目に追加するにはどうすればいいですか?

私は、人々がメニュー項目としてラジオボタンを作っていたいくつかの回答を見ました。しかし私はメニュー項目にWinformsで簡単に行える適切なラジオボタンを持っています。

私は他の人と同じ答えを得ることはありません、彼はメニュー項目]ラジオボタンがどのように見えるかの絵であることを確認する:

enter image description here

ところで、私はC#、WPFを使用しています。

+0

これは見たことがありますか? http://stackoverflow.com/questions/6253145/how-can-i-create-a-group-of-radio-menu-items-in-wpf –

+0

@Neil Mitchell:他のテーマをサポートする必要がある場合Luna、Aero、Classicなどのテーマは、おそらく各テーマスタイルごとに作成する必要があります。それはそれぞれのテーマのためにそれが各テーマのスタイルを持っているために必要です。それはあなたに合っていますか?つまり、機能とラジオボタンに焦点を当てて、少なくとも彼のための共通のスタイルを作る方がよいということです。あなたのスタイルに合うようにする必要がある場合は、私や他の誰かがあなたに1つのスタイルとラジオボタンの解決策を与えるなら、それはあなたに来るだろうか? –

+0

@AnatoliyNikolaevこの質問はスタイルに関するものです。機能を書くことはかなり簡単です。そして、私が欲しいのは、新しいスタイルの要素を書くのではなく、すでにテーマにあるものを活用する方法です。おそらく、WPFがラジオメニューボタンのスタイルを定義していない場合や、スタイルを正しく取得できない場合があります。確かに基礎となるOS(WPFではない)はラジオメニュースタイルを定義します。 –

答えて

15

編集テンプレート

<Window.Resources>   
    <Style x:Key="{x:Type MenuItem}" TargetType="MenuItem"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type MenuItem}"> 
        <Border x:Name="templateRoot" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
         <Grid VerticalAlignment="Center"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="Auto"/> 
           <ColumnDefinition Width="Auto"/> 
          </Grid.ColumnDefinitions> 
          <ContentPresenter x:Name="Icon" Content="{TemplateBinding Icon}" ContentSource="Icon" HorizontalAlignment="Center" Height="16" Margin="3" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center" Width="16"/> 
          <RadioButton Margin="3" IsChecked="{TemplateBinding IsChecked}" VerticalAlignment="Center" x:Name="GlyphPanel" Visibility="Collapsed"/> 
          <ContentPresenter ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" Grid.Column="1" ContentStringFormat="{TemplateBinding HeaderStringFormat}" ContentSource="Header" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
          <Popup x:Name="PART_Popup" AllowsTransparency="True" Focusable="False" IsOpen="{Binding IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}" PopupAnimation="{DynamicResource {x:Static SystemParameters.MenuPopupAnimationKey}}" Placement="Bottom"> 
           <Border x:Name="SubMenuBorder" BorderBrush="#FF999999" BorderThickness="1" Background="#FFF0F0F0" Padding="2"> 
            <ScrollViewer x:Name="SubMenuScrollViewer" Style="{DynamicResource {ComponentResourceKey ResourceId=MenuScrollViewer, TypeInTargetAssembly={x:Type FrameworkElement}}}"> 
             <Grid RenderOptions.ClearTypeHint="Enabled"> 
              <Canvas HorizontalAlignment="Left" Height="0" VerticalAlignment="Top" Width="0"> 
               <Rectangle x:Name="OpaqueRect" Fill="{Binding Background, ElementName=SubMenuBorder}" Height="{Binding ActualHeight, ElementName=SubMenuBorder}" Width="{Binding ActualWidth, ElementName=SubMenuBorder}"/> 
              </Canvas> 
              <Rectangle Fill="#FFD7D7D7" HorizontalAlignment="Left" Margin="29,2,0,2" Width="1"/> 
              <ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Cycle" Grid.IsSharedSizeScope="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" KeyboardNavigation.TabNavigation="Cycle"/> 
             </Grid> 
            </ScrollViewer> 
           </Border> 
          </Popup> 
         </Grid> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsSuspendingPopupAnimation" Value="True"> 
          <Setter Property="PopupAnimation" TargetName="PART_Popup" Value="None"/> 
         </Trigger> 
         <Trigger Property="Icon" Value="{x:Null}"> 
          <Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/> 
         </Trigger> 
         <Trigger Property="IsChecked" Value="True"> 
          <Setter Property="Visibility" TargetName="GlyphPanel" Value="Visible"/> 
          <Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/> 
         </Trigger> 
         <Trigger Property="IsHighlighted" Value="True"> 
          <Setter Property="Background" TargetName="templateRoot" Value="#3D26A0DA"/> 
          <Setter Property="BorderBrush" TargetName="templateRoot" Value="#FF26A0DA"/> 
         </Trigger> 
         <Trigger Property="IsEnabled" Value="False"> 
          <Setter Property="TextElement.Foreground" TargetName="templateRoot" Value="#FF707070"/> 
          <Setter Property="Visibility" TargetName="GlyphPanel" Value="Collapsed"/> 
         </Trigger> 
         <Trigger Property="CanContentScroll" SourceName="SubMenuScrollViewer" Value="False"> 
          <Setter Property="Canvas.Top" TargetName="OpaqueRect" Value="{Binding VerticalOffset, ElementName=SubMenuScrollViewer}"/> 
          <Setter Property="Canvas.Left" TargetName="OpaqueRect" Value="{Binding HorizontalOffset, ElementName=SubMenuScrollViewer}"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 

      </Setter.Value> 
     </Setter> 
    </Style> 

    <Style x:Key="ItemcontainerStyle" TargetType="MenuItem"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type MenuItem}"> 
        <Border x:Name="templateRoot" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
         <Grid Margin="-1"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition MinWidth="22" SharedSizeGroup="MenuItemIconColumnGroup" Width="Auto"/> 
           <ColumnDefinition Width="13"/> 
           <ColumnDefinition Width="*"/> 
           <ColumnDefinition Width="30"/> 
           <ColumnDefinition SharedSizeGroup="MenuItemIGTColumnGroup" Width="Auto"/> 
           <ColumnDefinition Width="20"/> 
          </Grid.ColumnDefinitions> 
          <ContentPresenter x:Name="Icon" Content="{TemplateBinding Icon}" ContentSource="Icon" HorizontalAlignment="Center" Height="16" Margin="3" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center" Width="16"/> 
          <Border x:Name="GlyphPanel" BorderBrush="#FF26A0DA" BorderThickness="1" Background="#3D26A0DA" ClipToBounds="False" HorizontalAlignment="Center" Height="22" Margin="-1,0,0,0" Visibility="Hidden" VerticalAlignment="Center" Width="22"> 
           <RadioButton x:Name="Glyph" IsChecked="{TemplateBinding IsChecked}" GroupName="a" VerticalAlignment="Center" HorizontalAlignment="Center"/> 
          </Border> 
          <ContentPresenter x:Name="menuHeaderContainer" ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" Grid.Column="2" ContentStringFormat="{TemplateBinding HeaderStringFormat}" ContentSource="Header" HorizontalAlignment="Left" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/> 
          <TextBlock x:Name="menuGestureText" Grid.Column="4" Margin="{TemplateBinding Padding}" Opacity="0.7" Text="{TemplateBinding InputGestureText}" VerticalAlignment="Center"/> 
         </Grid> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="Icon" Value="{x:Null}"> 
          <Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/> 
         </Trigger> 
         <Trigger Property="IsChecked" Value="True"> 
          <Setter Property="Visibility" TargetName="GlyphPanel" Value="Visible"/> 
          <Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/> 
         </Trigger> 
         <Trigger SourceName="Glyph" Property="IsChecked" Value="False"> 
          <Setter Property="Visibility" TargetName="GlyphPanel" Value="Hidden"/> 
          <Setter Property="Visibility" TargetName="Glyph" Value="Collapsed"/> 
         </Trigger> 
         <Trigger Property="IsHighlighted" Value="True"> 
          <Setter Property="Background" TargetName="templateRoot" Value="#3D26A0DA"/> 
          <Setter Property="BorderBrush" TargetName="templateRoot" Value="#FF26A0DA"/> 
         </Trigger> 
         <Trigger Property="IsEnabled" Value="False"> 
          <Setter Property="TextElement.Foreground" TargetName="templateRoot" Value="#FF707070"/> 
         </Trigger> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="IsHighlighted" Value="True"/> 
           <Condition Property="IsEnabled" Value="False"/> 
          </MultiTrigger.Conditions> 
          <Setter Property="Background" TargetName="templateRoot" Value="#0A000000"/> 
          <Setter Property="BorderBrush" TargetName="templateRoot" Value="#21000000"/> 
         </MultiTrigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 

MainWindow.xaml:

<Menu> 
     <MenuItem Header="File" ItemContainerStyle="{StaticResource ItemcontainerStyle}"> 
      <MenuItem IsCheckable="True" Header="Example Menu Item"/> 
      <MenuItem IsCheckable="True" Header="Example Menu Item"/> 
     </MenuItem> 
    </Menu> 

App.xaml

<Application x:Class="MenuItemTemplate.App" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     StartupUri="MainWindow.xaml"> 
<Application.Resources>   
    <!--Luna--> 
    <ResourceDictionary Source="/PresentationFramework.Luna, Version=3.0.0.0, 
    Culture=neutral, PublicKeyToken=31bf3856ad364e35, 
    ProcessorArchitecture=MSIL;component/themes/luna.normalcolor.xaml" /> 

    <!--Aero--> 
    <!--<ResourceDictionary Source="/PresentationFramework.Aero, Version=3.0.0.0, 
     Culture=neutral, PublicKeyToken=31bf3856ad364e35, 
     ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml"/>--> 

    <!--Classic--> 
    <!--<ResourceDictionary Source="/PresentationFramework.Classic, Version=3.0.0.0, 
     Culture=neutral, PublicKeyToken=31bf3856ad364e35, 
     ProcessorArchitecture=MSIL;component/themes/classic.xaml" />--> 
</Application.Resources> 

アウトプット

enter image description here

+0

どこでwpfを学びましたか?私はそれを学びたいと思う。 – Vishal

+0

からのstackoverflowおよびmsdn。 –

+0

ありがとう、情報のため。 – Vishal

2

あなたは、そのテンプレート・プロパティを変更することにより、コントロールの外観を変更することができます。

  <MenuItem> 
       <MenuItem.Template> 
        <ControlTemplate> 
         <RadioButton>Radio</RadioButton> 
        </ControlTemplate> 
       </MenuItem.Template> 
      </MenuItem> 

EDIT:

:画像に表示され外観を得るために、MenuItemのアイコンとしてのRadioButtonを使用します
   <MenuItem Header="Hallo"> 
        <MenuItem.Icon> 
         <RadioButton/> 
        </MenuItem.Icon> 
       </MenuItem> 
+0

私はあなたが持っているコードに慣れていましたが、メニュー項目のテキストの右側にある円の入った正方形のボックスの代わりにラジオボタンを作っています。私の写真に示されているように、同じラジオボタンを四角い円で描くようなコードを教えてください。 – Bubbled86

関連する問題