2010-12-04 6 views
3

J'ai 3 boutons. J'ai créé un style que j'utilise pour chacun des trois boutons pour afficher les états MouseOver et Pressed. J'ai besoin d'avoir une logique pour indiquer quel bouton a été sélectionné/cliqué. Si le bouton est cliqué, alors la couleur de fond doit rester/être comme pour l'état enfoncé et les deux autres boutons doivent être réinitialisés à la couleur de fond pour être comme un état normal. Voici le code que j'ai. Je me demande s'il est possible de tout faire en XAML ou comment le faire en code derrière? Merci j'avance.Comment changer la couleur d'arrière-plan des boutons cliquez sur l'un d'eux?

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
x:Class="test3.MainWindow" 
x:Name="Window" 
Title="MainWindow" 
Width="640" Height="480"> 

<Window.Resources> 
    <Style x:Key="ButtonStyle1" TargetType="{x:Type Button}"> 
     <Setter Property="BorderThickness" Value="1"/> 
     <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
     <Setter Property="HorizontalContentAlignment" Value="Center"/> 
     <Setter Property="VerticalContentAlignment" Value="Center"/> 
     <Setter Property="Padding" Value="1"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Button}"> 
        <Border x:Name="ButtonBackground" BorderBrush="{TemplateBinding BorderBrush}" SnapsToDevicePixels="true" Background="#FFFFE640"> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="CommonStates"> 
           <VisualState x:Name="Normal"/> 
           <VisualState x:Name="MouseOver"> 
            <Storyboard> 
             <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="ButtonBackground"> 
              <EasingColorKeyFrame KeyTime="0" Value="#FFC8B432"/> 
             </ColorAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="Pressed"> 
            <Storyboard> 
             <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="ButtonBackground"> 
              <EasingColorKeyFrame KeyTime="0" Value="#FFBCAA31"/> 
             </ColorAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="Disabled"/> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 
         <ContentPresenter RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="0,0,0,4" HorizontalAlignment="Center" VerticalAlignment="Bottom"/> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsKeyboardFocused" Value="true"> 
         </Trigger> 
         <Trigger Property="ToggleButton.IsChecked" Value="true"> 
         </Trigger> 
         <Trigger Property="IsEnabled" Value="false"> 
          <Setter Property="Foreground" Value="#ADADAD"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    <Storyboard x:Key="OnMouseOneEnter"> 
     <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="button_One"> 
      <EasingColorKeyFrame KeyTime="0" Value="#FFDAC326"/> 
     </ColorAnimationUsingKeyFrames> 
    </Storyboard> 
    <Storyboard x:Key="OnMouseOneLeave"> 
     <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="button_One"> 
      <EasingColorKeyFrame KeyTime="0" Value="#FFFFE640"/> 
     </ColorAnimationUsingKeyFrames> 
     <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="button_Two"> 
      <EasingColorKeyFrame KeyTime="0" Value="#FF85781C"/> 
     </ColorAnimationUsingKeyFrames> 
    </Storyboard> 
    <Storyboard x:Key="OnMoseOneClick"> 
     <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="button_One"> 
      <EasingColorKeyFrame KeyTime="0:0:0.2" Value="#FFDAC326"/> 
     </ColorAnimationUsingKeyFrames> 
    </Storyboard> 
</Window.Resources> 

<Grid> 
    <StackPanel x:Name="LayoutRoot"> 
     <Button x:Name="button_One" HorizontalAlignment="Left" Width="90" Height="90" Content="One" Style="{DynamicResource ButtonStyle1}" Cursor="Hand" Margin="0,0,0,4" /> 
     <Button x:Name="button_Two" HorizontalAlignment="Left" Width="90" Height="90" Content="Two" Style="{DynamicResource ButtonStyle1}" Cursor="Hand" Margin="0,0,0,4" /> 
     <Button x:Name="button_Three" HorizontalAlignment="Left" Width="90" Height="90" Content="Two" Style="{DynamicResource ButtonStyle1}" Cursor="Hand" Margin="0,0,0,4" /> 
    </StackPanel> 
</Grid> 

Répondre

0

Semble à moi comme si vous étiez réellement après la fonctionnalité de bouton radio.

http://www.wpftutorial.net/RadioButton.html

Donnez à chaque bouton radio la même GroupName et vous obtiendrez les fonctionnalités dont vous avez besoin.

+0

Merci. Je vais essayer ça. – vladc77

0

boutons à bascule? Créer un contrôle utilisateur bouton bascule qui se compose de deux boutons. On commence à être caché. Lorsque vous cliquez sur le visible, cachez-le et montrez le caché. Vous pouvez également masquer/afficher les autres boutons dans un événement OnClick.

+0

je ne peux pas utiliser les boutons à bascule dans mon cas. Est-il possible de contrôler les valeurs de couleur d'arrière-plan de chaque bouton sur un seul clic? – vladc77

1

Vous pouvez changer d'utiliser le « IsFocused » propert, au lieu de « IsPressed »

Questions connexes