Как не разрешить состояние onMouseOver / Out, когда выбран переключатель? - PullRequest
1 голос
/ 07 декабря 2010

Мне интересно, возможно ли остановить состояние onMouserOver, когда переключатель установлен или выбран. У меня есть прототип, где я переключаю контент, щелкая рестайлинговые переключатели. Мне нужно, чтобы выбранное состояние не изменялось, пока выбран переключатель. Теперь, когда прокрутка мыши / свиток произошла, он изменил цвет фона, как и предполагалось, когда кнопка не нажата. Ниже приведен код. Заранее спасибо.

<StackPanel>
    <RadioButton x:Name="one"  Content="one" IsChecked="True" GroupName="intro" Style="{DynamicResource RadioButtons}" Style="{DynamicResource RadioButtons}" />
    <RadioButton x:Name="two"  Content="two" IsChecked="True" GroupName="intro" Style="{DynamicResource RadioButtons}" Style="{DynamicResource RadioButtons}" />
    <RadioButton x:Name="three"  Content="three" IsChecked="True" GroupName="intro" Style="{DynamicResource RadioButtons}" Style="{DynamicResource RadioButtons}" />
</StackPanel>

Стиль:

<Style x:Key="IntroRadioButtons" TargetType="{x:Type RadioButton}">
  <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
  <Setter Property="Background" Value="#F4F4F4"/>
  <Setter Property="BorderBrush" Value="{StaticResource CheckBoxStroke}"/>
  <Setter Property="BorderThickness" Value="1"/>
  <Setter Property="Template">
   <Setter.Value>
    <ControlTemplate TargetType="{x:Type RadioButton}">

      <Border HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
        Margin="{TemplateBinding Padding}" 
        VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
        x:Name="borderRadioButon" BorderBrush="{x:Null}" BorderThickness="0" 
        Background="#FFFFB343" Width="90" Height="90" >

      <VisualStateManager.VisualStateGroups>
       <VisualStateGroup x:Name="CommonStates">
        <VisualState x:Name="Normal"/>
        <VisualState x:Name="MouseOver">
         <Storyboard>
          <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="borderRadioButon">
           <EasingColorKeyFrame KeyTime="0" Value="#FFFD7713"/>
          </ColorAnimationUsingKeyFrames>
         </Storyboard>
        </VisualState>
        <VisualState x:Name="Pressed">
         <Storyboard>
          <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="borderRadioButon">
           <EasingColorKeyFrame KeyTime="0" Value="#FFFD7713"/>
          </ColorAnimationUsingKeyFrames>
         </Storyboard>
        </VisualState>
        <VisualState x:Name="Disabled"/>
       </VisualStateGroup>
       <VisualStateGroup x:Name="CheckStates">
        <VisualState x:Name="Checked">
         <Storyboard>
          <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="borderRadioButon">
           <EasingColorKeyFrame KeyTime="0" Value="#FFFD7713"/>
          </ColorAnimationUsingKeyFrames>
         </Storyboard>
        </VisualState>
        <VisualState x:Name="Unchecked"/>
        <VisualState x:Name="Indeterminate"/>
       </VisualStateGroup>
      </VisualStateManager.VisualStateGroups>

      <ContentPresenter RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
       Margin="0,0,0,4" HorizontalAlignment="Center" VerticalAlignment="Bottom" 
       TextBlock.FontSize="{DynamicResource PrimaryFontSize}" 
       TextBlock.FontFamily="{DynamicResource PrimaryFontFamily}"    
         />

     </Border>

     <ControlTemplate.Triggers>
      <Trigger Property="HasContent" Value="true">
       <Setter Property="FocusVisualStyle" Value="{StaticResource CheckRadioFocusVisual}"/>
       <Setter Property="Padding" Value="4,0,0,0"/>
      </Trigger>
      <Trigger Property="IsEnabled" Value="false">
       <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
      </Trigger>
     </ControlTemplate.Triggers>
    </ControlTemplate>
   </Setter.Value>
  </Setter>
 </Style>

1 Ответ

1 голос
/ 08 декабря 2010

Подобный вопрос здесь .Похоже на конфликт двух VisualStateGroup, когда они нацелены на одно и то же свойство для одного и того же элемента управления.Использовал тот же подход, что и в ссылке, и, похоже, он работает: добавлены две границы, по одной для каждой группы.Если есть лучший способ решить эту проблему, чем меня интересует, что это такое:)

<Style x:Key="IntroRadioButtons" TargetType="{x:Type RadioButton}">
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
    <Setter Property="Background" Value="#F4F4F4"/>
    <Setter Property="BorderBrush" Value="{StaticResource CheckBoxStroke}"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type RadioButton}">
                <Grid>
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualState x:Name="Normal"/>
                            <VisualState x:Name="MouseOver">
                                <Storyboard>
                                    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="borderRadioButon">
                                        <EasingColorKeyFrame KeyTime="0" Value="#FFFD7713"/>
                                    </ColorAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Pressed">
                                <Storyboard>
                                    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="borderRadioButon">
                                        <EasingColorKeyFrame KeyTime="0" Value="#FFFD7713"/>
                                    </ColorAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Disabled"/>
                        </VisualStateGroup>
                        <VisualStateGroup x:Name="CheckStates">
                            <VisualState x:Name="Checked">
                                <Storyboard>
                                    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="borderRadioButon2">
                                        <EasingColorKeyFrame KeyTime="0" Value="#FFFD7713"/>
                                    </ColorAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Unchecked"/>
                            <VisualState x:Name="Indeterminate"/>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <Border HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"  
                            Margin="{TemplateBinding Padding}"  
                            VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
                            x:Name="borderRadioButon" BorderBrush="{x:Null}" BorderThickness="0"  
                            Background="#FFFFB343" Width="90" Height="90">
                        <Border HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"  
                                Margin="0"
                                VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
                                x:Name="borderRadioButon2" BorderBrush="{x:Null}" BorderThickness="0"  
                                Background="Transparent" Width="90" Height="90">
                            <ContentPresenter RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"  
                                            Margin="0,0,0,4" HorizontalAlignment="Center" VerticalAlignment="Bottom"  
                                            TextBlock.FontSize="{DynamicResource PrimaryFontSize}"  
                                            TextBlock.FontFamily="{DynamicResource PrimaryFontFamily}"/>
                        </Border>
                    </Border>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="HasContent" Value="true">
                        <Setter Property="FocusVisualStyle" Value="{StaticResource CheckRadioFocusVisual}"/>
                        <Setter Property="Padding" Value="4,0,0,0"/>
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
...