2014-10-22 3 views
0

Я использую ниже шаблон управления для моей радио кнопки. У меня проблема с этим кодом. Заметил CheckMark не обрушивается, когда Radio Button не установлен. Любая помощь приветствуется.Проблемы с шаблоном управления WPF RadioButton

<ControlTemplate x:Key="RadioButtonControlTemplate" TargetType="{x:Type RadioButton}"> 
     <BulletDecorator x:Name="bulletDecorator" SnapsToDevicePixels="True" Background="Transparent"> 
      <BulletDecorator.Bullet> 
       <Grid Width="30" 
       Height="30" > 
        <Ellipse x:Name="Border" 
       Fill="{StaticResource NormalBrush}" 
       StrokeThickness="3" 
       Stroke="{StaticResource NormalBorderBrush}" /> 
        <Ellipse x:Name="CheckMark" 
       Margin="9" 
       Fill="{StaticResource GlyphBrush}" /> 
       </Grid> 
      </BulletDecorator.Bullet> 
      <ContentPresenter Margin="4,0,0,0" VerticalAlignment="Center" HorizontalAlignment="Left" RecognizesAccessKey="True"></ContentPresenter> 
     </BulletDecorator> 
     <ControlTemplate.Triggers> 
      <Trigger Property="IsChecked" Value="False"> 
       <Setter Property="Visibility" TargetName="CheckMark" Value="Collapsed"/> 
      </Trigger> 
      <Trigger Property="HasContent" Value="True"> 
       <Setter Property="FocusVisualStyle"> 
        <Setter.Value> 
         <Style> 
          <Setter Property="Control.Template"> 
           <Setter.Value> 
            <ControlTemplate> 
             <Rectangle Stroke="Black" StrokeDashArray="1 2" StrokeThickness="1" Margin="14,0,0,0" SnapsToDevicePixels="True"/> 
            </ControlTemplate> 
           </Setter.Value> 
          </Setter> 
         </Style> 
        </Setter.Value> 
       </Setter> 
       <Setter Property="Padding" Value="2,0,0,0"/> 
      </Trigger> 
      <Trigger Property="IsEnabled" Value="False"> 
       <Setter Property="Opacity" TargetName="bulletDecorator" Value="0.2"/> 
      </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 
+0

Откуда вы знаете, что на самом деле это не проверено? Я пробовал ваш код, и он работает нормально. Но вам нужно хотя бы *** 2 переключателя ***, чтобы проверить это. Потому что при использовании всего 1 радиообъекта вы можете просто проверить его *** один раз ***, после этого вы не можете снять его с помощью пользовательского интерфейса (если только не используете код). –

+0

Спасибо. Я использую 2 переключателя, но все равно не работает. Вы пытались использовать 2 переключателя, и все работает нормально? – codematrix

+1

, конечно, обратите внимание, что ваши 2 радиообъектива должны быть помещены в один и тот же контейнер, в противном случае вам нужно установить одинаковое 'GroupName' для обоих. –

ответ

1

Ваш код работает нормально. Я заменил ваш ресурс Brush es, потому что вы не предоставили его в своем коде, но, используя этот базовый пример, я мог видеть, что работают RadioButton ... вам может понадобиться разобраться с меткой, потому что они отключены от в 'галочки':

<ControlTemplate x:Key="RadioButtonControlTemplate" TargetType="{x:Type RadioButton}"> 
    <BulletDecorator x:Name="bulletDecorator" SnapsToDevicePixels="True" Background="Transparent"> 
     <BulletDecorator.Bullet> 
      <Grid Width="30" Height="30"> 
       <Ellipse x:Name="Border" Fill="Red" StrokeThickness="3" Stroke="Black" /> 
       <Ellipse x:Name="CheckMark" StrokeThickness="1" Margin="9" Fill="Green" /> 
      </Grid> 
     </BulletDecorator.Bullet> 
     <ContentPresenter Margin="4,0,0,0" VerticalAlignment="Center" HorizontalAlignment="Left" RecognizesAccessKey="True"></ContentPresenter> 
    </BulletDecorator> 
    <ControlTemplate.Triggers> 
     <Trigger Property="IsChecked" Value="False"> 
      <Setter Property="Visibility" TargetName="CheckMark" Value="Collapsed"/> 
      <Setter Property="Stroke" TargetName="CheckMark" Value="Blue"/> 
     </Trigger> 
     <Trigger Property="HasContent" Value="True"> 
      <Setter Property="FocusVisualStyle"> 
       <Setter.Value> 
        <Style> 
         <Setter Property="Control.Template"> 
          <Setter.Value> 
           <ControlTemplate> 
            <Rectangle Stroke="Black" StrokeDashArray="1 2" StrokeThickness="1" Margin="14,0,0,0" SnapsToDevicePixels="True"/> 
           </ControlTemplate> 
          </Setter.Value> 
         </Setter> 
        </Style> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="Padding" Value="2,0,0,0"/> 
     </Trigger> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Opacity" TargetName="bulletDecorator" Value="0.2"/> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

...

<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> 
    <RadioButton Template="{StaticResource RadioButtonControlTemplate}" Content="Yes" /> 
    <RadioButton Template="{StaticResource RadioButtonControlTemplate}" Content="No" /> 
</StackPanel> 

Вот как это выглядит (извините об ужасных цветов):

enter image description here