هل من الممكن استخدام MENUITEM قابلة للتحديد كقالب الرقابة على زر راديو؟

StackOverflow https://stackoverflow.com/questions/654074

سؤال

ولدي قائمة في طلبي WPF مع خيارات متعددة والتي تعمل مثل مجموعة زر الاختيار (اختيار واحد يتم إزالة بقية منهم). وأود أن استخدام عناصر القائمة قابلة للتحديد كقوالب لأزرار الراديو.

ولقد حاولت تعيين القالب ولكن لا يبدو للعمل مثل واحد تتوقع. لا يبدو اختيار وإلغاء تحديد العناصر المراد تزامنها مع القيم أزرار الراديو ".

واعتقد انني يمكن استخدام قالب أكثر تعقيدا و"وهمية" علامة المحدد باستخدام مسار أو شيء من هذا ولكن يبدو الكثير بفظاعة العمل لهذا الغرض بسيط. أيضا عند استخدام قالب أكثر تعقيدا كنت قد لمعالجة الموضوعات المختلفة التي كنت تفضل عدم تريد القيام به.

وهنا مثال بسيط لتوضيح المشكلة.

<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>
هل كانت مفيدة؟

المحلول

والمشكلة أظهرت أن معالجات الأحداث الماوس MenuItem انه تم الاستيلاء على لRadioButton. عندما أضع IsHitTestVisible على MenuItem إلى كاذبة وأضاف 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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top