2009-03-08 2 views
1

Je ne peux pas trouver une solution à ce problème en XAML:WPF Triggers: Modification d'un hors-champ style de contrôle dans un déclencheur

Je veux animer la largeur du bouton droit à un certain valeur lorsque IsMouseOver du bouton gauche est vrai. Je ne sais pas où mettre ceci: dans un style ou un modèle de l'un des boutons ou dans un style sur la grille. Est-ce même possible?

<Border Style="{StaticResource ContentBodyStyle}" x:Name="Border" > 
    <Grid Width="Auto" Height="Auto" Style="{DynamicResource GridStyle1}"> 
     <Grid.ColumnDefinitions> 
     <ColumnDefinition/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 
     <Button Margin="0,0,0,0" Content="Button" Grid.Row="0" x:Name="BtnLeft" Style="{DynamicResource ButtonStyle1}"/> 
     <Button Margin="0,0,0,0" Content="Button" Grid.Column="1" x:Name="BtnRight" Width="0"/> 
    </Grid> 
</Border> 

Merci

Répondre

3

Je ne suis pas sûr que vous pouvez définir les propriétés des contrôles en dehors de la portée d'un contrôle avec un style qui lui est attribué. Même si c'est possible, cela ne semble pas correct. Dans votre scénario, vous pouvez utiliser des déclencheurs d'événements et des storyboards, définis n'importe où sur les deux boutons. Voici un exemple de la façon de modifier BtnLeft, bien que je préfère mettre les storyboards un peu plus loin l'arbre pour permettre la réutilisation, si nécessaire:

<Button Margin="0,0,0,0" Content="Button" Grid.Row="0" x:Name="BtnLeft" Style="{DynamicResource ButtonStyle1}"> 
    <Button.Resources> 
     <Storyboard x:Key="OnMouseEnter1"> 
      <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" 
       Storyboard.TargetName="BtnRight" 
       Storyboard.TargetProperty="Width"> 
       <SplineDoubleKeyFrame KeyTime="00:00:00.5" Value="75"/> 
      </DoubleAnimationUsingKeyFrames> 
     </Storyboard> 
     <Storyboard x:Key="OnMouseLeave1"> 
      <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" 
       Storyboard.TargetName="BtnRight" 
       Storyboard.TargetProperty="Width"> 
       <SplineDoubleKeyFrame KeyTime="00:00:00.5" Value="0"/> 
      </DoubleAnimationUsingKeyFrames> 
     </Storyboard> 
    </Button.Resources> 
    <Button.Triggers> 
     <EventTrigger RoutedEvent="Mouse.MouseEnter" SourceName="BtnLeft"> 
      <BeginStoryboard Storyboard="{StaticResource OnMouseEnter1}"/> 
     </EventTrigger> 
     <EventTrigger RoutedEvent="Mouse.MouseLeave" SourceName="BtnLeft"> 
      <BeginStoryboard Storyboard="{StaticResource OnMouseLeave1}"/> 
     </EventTrigger> 
    </Button.Triggers> 
</Button> 

Au lieu de la propriété IsMouseOver, vous pouvez utiliser MouseEnter et MouseLeave événements. Cela devrait vous donner la même fonctionnalité.

Éditer: La propriété SourceName peut être omise du EventTrigger lorsque ce déclencheur est défini dans la portée du bouton.

+0

Merci exactement ce dont j'avais besoin. –

Questions connexes