2013-02-20 52 views
14

मैं अपने मेनू आइटम में रेडियो बटन जोड़ना चाहता हूं।आप मेनू आइटम में रेडियो बटन कैसे जोड़ते हैं?

मैंने कुछ जवाब देखा है जहां लोग मेनू आइटम के रूप में रेडियो बटन बना रहे थे। लेकिन मैं चाहता हूं कि मेरे मेनू आइटमों में उचित रेडियो बटन हो जो आसानी से Winforms में किया जा सके।

यकीन है कि मैं अन्य लोगों के रूप में एक ही जवाब नहीं मिलता है बनाने के लिए, वह क्या मेनू आइटम 'रेडियो बटन की तरह दिखना चाहिए की एक तस्वीर है:

enter image description here

और वैसे, मैं सी #, डब्ल्यूपीएफ का उपयोग कर रहा हूँ।

+0

क्या आपने यह देखा है? http://stackoverflow.com/questions/6253145/how-can-i-create-a-group-of-radio-menu-items-in-wpf –

+0

@ नील मिशेल: इस मामले में जब आपको अन्य विषयों का समर्थन करने की आवश्यकता होती है जैसे लुना, एयरो, क्लासिक इत्यादि, शायद प्रत्येक विषय शैली के लिए बनाई जाने की आवश्यकता होगी। प्रत्येक विषय के लिए प्रत्येक विषय के लिए एक शैली के साथ यह आवश्यक है। क्या वह तुम्हारे लिए ठीक है? मेरा मतलब है, कम से कम एक आम शैली बनाने के लिए कार्यक्षमता और रेडियो बटन पर ध्यान देना बेहतर है। फिर, अगर आपको इसे अपनी शैली में फिट करने में सक्षम होना चाहिए। अगर मैं या कोई और आपको एक शैली और रेडियो बटन का समाधान देगा, तो यह आपके पास आएगा? –

+0

@AnatoliyNikolaev यह सवाल केवल शैली के बारे में है - कार्यक्षमता लिखना बहुत छोटा है। और जो मैं चाहता हूं वह है कि थीम में पहले से ही क्या लाभ उठाने का एक तरीका है, न कि नए स्टाइल तत्वों को लिखें। शायद यह मामला है कि डब्ल्यूपीएफ रेडियो मेनू बटन के लिए शैलियों को परिभाषित नहीं करता है, या शायद मैं शैली को ठीक तरह से नहीं निकाल सकता। निश्चित रूप से अंतर्निहित ओएस (डब्ल्यूपीएफ नहीं) रेडियो मेनू शैलियों को परिभाषित करता है। –

उत्तर

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

आपने डब्ल्यूपीएफ कहाँ सीखा। मैं इसे सीखना चाहता हूं। – Vishal

+0

स्टैक ओवरफ्लो और एमएसडीएन से। –

+0

धन्यवाद, जानकारी के लिए। – Vishal

2

आप अपने टेम्पलेट-संपत्ति बदलकर एक नियंत्रण के रूप को बदलने कर सकते हैं:

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

संपादित करें: MenuItem-चिह्न के रूप में एक RadioButton का प्रयोग करें, देखो जो चित्र में दिखाया गया है पाने के लिए:

   <MenuItem Header="Hallo"> 
        <MenuItem.Icon> 
         <RadioButton/> 
        </MenuItem.Icon> 
       </MenuItem> 
+0

मैंने आपके पास कोड करने के लिए उपयोग किया है, लेकिन यह मेन्यू आइटम के टेक्स्ट के दाईं ओर उस सर्कल बॉक्स के बजाय उस स्क्वायर बॉक्स को रखने के बजाए एक रेडियो बटन बना रहा है। क्या आप कृपया कुछ कोड दे सकते हैं जो स्क्वायर में एक सर्कल के साथ एक ही रेडियो बटन बनाएगा, जैसा कि मेरी तस्वीर में दिखाया गया है? – Bubbled86