2016-11-09 21 views
1

ラジオボタンのスタイルを作成しています。クリックするとラジオボタンの色を変更します。しかし、あなたがmouseoverラジオボタンを押すと色も変わるようにしたいと思います。私は基本を実装していますが、ラジオボタンがすでに選択されていて(したがって色が異なる場合)、mouseoverを取得するとその色は新しい色に変わり、mouseoverが完了すると元の選択されていない色に戻ります。WPFマウスオーバーでコントロールの色がリセットされる

正しい色になるようにクリックされたときを知る方法はありますか?

<Style x:Key="MyRadioButton" TargetType="{x:Type RadioButton}"> 
    <Setter Property="SnapsToDevicePixels" Value="true" /> 
    <Setter Property="FocusVisualStyle" Value="{DynamicResource RadioButtonFocusVisual}" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type RadioButton}"> 
       <BulletDecorator Background="Transparent"> 

        <BulletDecorator.Bullet> 
         <Grid Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"> 
          <Border x:Name="Border" Margin="1" CornerRadius="5" HorizontalAlignment="Center" 
            Width="50" Background="White" Padding="2" SnapsToDevicePixels="true"> 
           <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center"/> 
          </Border> 
         </Grid> 
        </BulletDecorator.Bullet> 

        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="CommonStates"> 
          <VisualState x:Name="Normal" /> 
          <VisualState x:Name="MouseOver"> 
           <Storyboard> 
            <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" 
             Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"> 
             <EasingColorKeyFrame KeyTime="0" Value="{StaticResource SelectedUnfocusedColor}" /> 
            </ColorAnimationUsingKeyFrames> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="Pressed"> 
          </VisualState> 
          <VisualState x:Name="Disabled"> 
           <Storyboard> 
            <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" 
              Storyboard.TargetProperty="(Panel.Background).(GradientStop.Color)"> 
             <EasingColorKeyFrame KeyTime="0" Value="{StaticResource ControlLightColor}" /> 
            </ColorAnimationUsingKeyFrames> 
           </Storyboard> 
          </VisualState> 
         </VisualStateGroup> 
         <VisualStateGroup x:Name="CheckStates"> 
          <VisualState x:Name="Checked"> 
           <Storyboard> 
            <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" 
             Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"> 
             <EasingColorKeyFrame KeyTime="0" Value="{StaticResource SelectedBackgroundColor}" /> 
            </ColorAnimationUsingKeyFrames> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="Unchecked" /> 
          <VisualState x:Name="Indeterminate" /> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
       </BulletDecorator> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

答えて

1

使用このStyle(TargetNameはBorderはちょうどBorderクラスである)、そしてUnchecked状態をテストするために、2つの差分RadioButton Sを配置します。

<Style TargetType="{x:Type RadioButton}"> 
      <Setter Property="SnapsToDevicePixels" Value="true" /> 
      <Setter Property="FocusVisualStyle" Value="{DynamicResource RadioButtonFocusVisual}" /> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type RadioButton}"> 
         <BulletDecorator Background="Transparent"> 

          <BulletDecorator.Bullet> 
           <Grid Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"> 

            <Border x:Name="Border" Margin="1" CornerRadius="5" HorizontalAlignment="Center" 
             Width="50" Padding="2" SnapsToDevicePixels="true"> 
             <Border.Background> 
              <VisualBrush> 
               <VisualBrush.Visual> 
                <Grid> 
                 <Border x:Name="InnerBorder" Margin="1" CornerRadius="5" HorizontalAlignment="Center" 
            Width="50" Background="Transparent" Padding="2" SnapsToDevicePixels="true"/> 
                 <Border x:Name="OuterBorder" Margin="1" CornerRadius="5" HorizontalAlignment="Center" 
            Width="50" Background="Transparent" Padding="2" SnapsToDevicePixels="true"/> 

                </Grid> 
               </VisualBrush.Visual> 
              </VisualBrush> 
             </Border.Background> 
              <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center"/> 
             </Border> 

           </Grid> 
          </BulletDecorator.Bullet> 

          <VisualStateManager.VisualStateGroups> 

           <VisualStateGroup x:Name="CommonStates"> 
            <VisualState x:Name="Normal" /> 
            <VisualState x:Name="MouseOver"> 
             <Storyboard> 
              <ColorAnimationUsingKeyFrames Storyboard.TargetName="OuterBorder" 
                Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"> 
               <EasingColorKeyFrame KeyTime="0" Value="Red" /> 
              </ColorAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Pressed"> 
            </VisualState> 
            <VisualState x:Name="Disabled"> 
             <Storyboard> 
              <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" 
              Storyboard.TargetProperty="(Panel.Background).(GradientStop.Color)"> 
               <EasingColorKeyFrame KeyTime="0" Value="Pink" /> 
              </ColorAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
           <VisualStateGroup x:Name="CheckStates"> 
            <VisualState x:Name="Checked"> 
             <Storyboard> 
              <ColorAnimationUsingKeyFrames Storyboard.TargetName="InnerBorder" 
             Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"> 
               <EasingColorKeyFrame KeyTime="0" Value="Yellow" /> 
              </ColorAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Unchecked"> 
             <Storyboard> 
              <ColorAnimationUsingKeyFrames Storyboard.TargetName="InnerBorder" 
             Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"> 
               <EasingColorKeyFrame KeyTime="0" Value="Transparent" /> 
              </ColorAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 

            <VisualState x:Name="Indeterminate" /> 
           </VisualStateGroup> 

          </VisualStateManager.VisualStateGroups> 
         </BulletDecorator> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
関連する問題