2013-02-20 37 views
14

Menü öğelerine radyo düğmeleri eklemek istiyorum.Menü Düğmelerine Radyo Düğmeleri Nasıl Eklenir?

Kullanıcıların menü öğeleri olarak radyo düğmelerini yaptığı birkaç cevap gördüm. Ama menü öğelerinin Winforms içinde kolayca yapılabilen uygun radyo düğmesine sahip olmasını istiyorum. Ben,

enter image description here

Ve bu arada:

diğer insanlarla aynı cevap alamadım emin olmak için, o menü öğeleri radyo düğmeleri nasıl görünmesi gerektiği resmidir C#, WPF kullanıyorum.

+0

Bunu gördün mü? http://stackoverflow.com/questions/6253145/how-can-i-create-a-group-of-radio-menu-items-in-wpf –

+0

@Neil Mitchell: Diğer temaları desteklemeniz gerektiğinde Luna, Aero, Classic vb. gibi her tema stili için muhtemelen yaratılması gerekecektir. Her bir tema için her tema için bir stil taşımak gerekir. Bu sana yakışıyor mu? Yani, onun için en az bir ortak stil yapmak için işlevsellik ve radyo düğmelerine odaklanmak daha iyidir. Sonra, tarzınıza uygun hale getirmeniz gerekiyorsa. Ben ya da bir başkası size bir stil ve radyo düğmesi için bir çözüm sunacaksa, size gelecek mi? –

+0

@AnatoliyNikolaev Bu soru sadece stil hakkında - işlevselliği yazmak oldukça önemsiz. Ve istediğim, temalarda zaten olanı kullanmanın, yeni stil unsurları yazmanın bir yolu. WPF'nin radyo menüsü düğmeleri için stilleri tanımlamaması veya belki de stili düzgün bir şekilde alamıyorum. Tabii ki temel işletim sistemi (WPF değil) radyo menüsü stillerini tanımlar. –

cevap

15

Düzenlendi Şablon

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

çıkış

enter image description here

+0

nerede öğrendin wpf. Bunu öğrenmek isterim. – Vishal

+0

Yığın akışından ve msdn'den. –

+0

Bilgi için teşekkürler. – Vishal

2

Bunu Şablon-özelliğini değiştirerek Kontrol görünümünü değiştirebilirsiniz:

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

DÜZENLEME:

: resimde gösterilen görünümü elde etmek, Menuıtem-Simgesi olarak bir RadioButton kullanın
   <MenuItem Header="Hallo"> 
        <MenuItem.Icon> 
         <RadioButton/> 
        </MenuItem.Icon> 
       </MenuItem> 
+0

Sahip olduğunuzu kodlamak için kullandım, ancak menü öğesinin metninin sağında bir daire bulunan kare kutucuğa sahip olmak yerine bir radyo düğmesi yapıyor. Resmimde gösterildiği gibi, kare içindeki kare ile aynı radyo düğmesini yapacak bir kod verebilir misiniz? – Bubbled86

İlgili konular