none
RadioButton в ContextMenu RRS feed

  • Вопрос

  • Всем привет, кто может показать пример как сделать контекстное меню с радиобатанами. Я сделал:

     

     <ContextMenu x:Key="ConflictResolevingMenu">

                    <StackPanel Orientation="Vertical">

                        <RadioButton>123</RadioButton>

                        <RadioButton>233</RadioButton>

                        <RadioButton>432</RadioButton>

                    </StackPanel>

            </ContextMenu>

    Но при наведение на какой либо радио батотн, фон контекстного меню становится синим. как это полечить?

     

    • Перемещено Abolmasov Dmitry 3 декабря 2010 г. 6:05 (От:Настольные ПК)
    2 декабря 2010 г. 18:25

Ответы

  • xaml:

    <Window x:Class="WpfApplication14.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:my="clr-namespace:WpfApplication14"
        Title="MainWindow" Height="350" Width="525">
      <Window.Resources>
        <Style x:Key="{x:Type MenuItem}" TargetType="{x:Type MenuItem}">
          <Setter Property="Margin" Value="18,0,18,0" />
          <!--<Setter Property="Width" Value="50" />-->
          <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate>
                <ContentControl Content="{Binding Path=Header, RelativeSource={RelativeSource TemplatedParent}}" Margin="{TemplateBinding Margin}"></ContentControl>
              </ControlTemplate>
            </Setter.Value>
          </Setter>
        </Style>
      </Window.Resources>
      <Grid Background="AntiqueWhite">
        <Grid.ContextMenu>
          <ContextMenu Name="myMenu">
            <RadioButton Content="111" Click="RadioButton_Click"/>
            <RadioButton Content="111" Click="RadioButton_Click"/>
            <RadioButton Content="111" Click="RadioButton_Click"/>
          </ContextMenu>
        </Grid.ContextMenu>
      </Grid>
    </Window>
    
    

    code:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    namespace WpfApplication14
    {
      /// <summary>
      /// Interaction logic for MainWindow.xaml
      /// </summary>
      public partial class MainWindow : Window
      {
        public MainWindow()
        {
          InitializeComponent();
        }
    
        private void RadioButton_Click(object sender, RoutedEventArgs e)
        {
          myMenu.IsOpen = false;
        }
      }
    }
    
    


    Для связи [mail]
    • Помечено в качестве ответа Abolmasov Dmitry 14 декабря 2010 г. 9:41
    10 декабря 2010 г. 15:44

Все ответы

  • Это происходит подсветка выбранного элемента, а т.к. у вас в ContextMenu вложен всего 1 элемент (это StackPanel), то он занимает все пространство меню, и получается изменение всего фона контексного меню.

    Сделайте просто

    <ContextMenu x:Key="ConflictResolevingMenu">
              <RadioButton>123</RadioButton>
              <RadioButton>233</RadioButton>
              <RadioButton>432</RadioButton>
    </ContextMenu>
    
    Или вы хотите чтобы вообще не подсвечивались пункты меню?


    Для связи [mail]
    3 декабря 2010 г. 6:20
  • Да, хотелось бы чтобы вообще не подсвечивалось.
    3 декабря 2010 г. 8:44
  • И еще проблема, при выборе радио батона, контекстное меню не проподает. Как сделать чтобы оно исчезало.

    3 декабря 2010 г. 16:25
  • xaml:

    <Window x:Class="WpfApplication14.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:my="clr-namespace:WpfApplication14"
        Title="MainWindow" Height="350" Width="525">
      <Window.Resources>
        <Style x:Key="{x:Type MenuItem}" TargetType="{x:Type MenuItem}">
          <Setter Property="Margin" Value="18,0,18,0" />
          <!--<Setter Property="Width" Value="50" />-->
          <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate>
                <ContentControl Content="{Binding Path=Header, RelativeSource={RelativeSource TemplatedParent}}" Margin="{TemplateBinding Margin}"></ContentControl>
              </ControlTemplate>
            </Setter.Value>
          </Setter>
        </Style>
      </Window.Resources>
      <Grid Background="AntiqueWhite">
        <Grid.ContextMenu>
          <ContextMenu Name="myMenu">
            <RadioButton Content="111" Click="RadioButton_Click"/>
            <RadioButton Content="111" Click="RadioButton_Click"/>
            <RadioButton Content="111" Click="RadioButton_Click"/>
          </ContextMenu>
        </Grid.ContextMenu>
      </Grid>
    </Window>
    
    

    code:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    namespace WpfApplication14
    {
      /// <summary>
      /// Interaction logic for MainWindow.xaml
      /// </summary>
      public partial class MainWindow : Window
      {
        public MainWindow()
        {
          InitializeComponent();
        }
    
        private void RadioButton_Click(object sender, RoutedEventArgs e)
        {
          myMenu.IsOpen = false;
        }
      }
    }
    
    


    Для связи [mail]
    • Помечено в качестве ответа Abolmasov Dmitry 14 декабря 2010 г. 9:41
    10 декабря 2010 г. 15:44