Frage

Ich kann nicht mit einer Lösung für dieses Problem in XAML kommen:

Ich mag die Breite der rechten Taste auf einen bestimmten Wert animieren, wenn IsMouseOver der linken Taste wahr ist. Ich weiß nicht, wo diese setzen: in einem Stil oder eine Vorlage von einem der Tasten oder in einem Stil auf dem Gitter. 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>

Danke

War es hilfreich?

Lösung

Ich bin nicht sicher, ob Sie die Eigenschaften für Kontrollen außerhalb des Geltungsbereichs eines Steuer mit einem Stil zugeordnet es einstellen. Selbst wenn es möglich ist, scheint es nicht richtig, dies zu tun. Was können Sie in Ihrem Szenario zu tun ist, Ereignis-Triggern und Storyboards zu verwenden, definierten überall würden sie auf beiden Tasten sichtbar. Hier ist ein Beispiel dafür, wie BtnLeft zu ändern, obwohl ich lieber die Storyboards setzt 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 MouseEnter- und Leave Ereignisse verwenden. Das sollte Ihnen die gleiche Funktionalität geben.

Edit:. Die SourceName Eigenschaft kann von den EventTrigger weggelassen werden, wenn das Trigger im Rahmen der Schaltfläche definiert wird

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top