2009-03-08 3 views
1

Ich kann nicht mit einer Lösung für dieses Problem in XAML kommen:WPF Trigger: in einem Trigger Out-of-scope Kontrolle Stil ändern

ich die Breite der rechten Taste auf einen bestimmtes animieren mag Wert, wenn IsMouseOver der linken Taste wahr ist. Ich weiß nicht, wo ich das hinstellen soll: in einem Stil oder einer Vorlage einer der Schaltflächen oder in einem Stil auf dem Raster. Ist es überhaupt möglich?

<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> 

Dank

Antwort

3

Ich bin nicht sicher, Sie Eigenschaften für Kontrollen außerhalb des Geltungsbereichs eines Steuer mit einem Stil zugeordnet es einstellen. Auch wenn es möglich ist, scheint es nicht richtig zu sein. In Ihrem Szenario können Sie Ereignisauslöser und Storyboards verwenden, die überall definiert werden, wo sie für beide Schaltflächen sichtbar sind. Hier ist ein Beispiel dafür, wie BtnLeft zu ändern, obwohl ich lieber die Storyboards setzen ein bisschen weiter den Baum für die Wiederverwendung zu ermöglichen, falls erforderlich:

<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> 

Anstelle der IsMouseOver Eigenschaft können Sie verwenden MouseEnter- und Leave Veranstaltungen. Das sollte Ihnen die gleiche Funktionalität geben.

Bearbeiten: Die SourceName Eigenschaft kann aus EventTrigger weggelassen werden, wenn dieser Auslöser im Rahmen der Schaltfläche definiert ist.

+0

Danke genau was ich brauchte. –