Inherited Stil eine InvalidOperationException werfen, wenn eine Aktion ausgeführt wird PauseStoryBoard
-
20-09-2019 - |
Frage
Die XAML unten ist die folgende: Wenn die Maus über einen Textblock ist, wird ihr Text vergrößern, wenn die Maus verlässt den Textblock seinen Text schrumpft. Wenn die Maus, um die Textgröße gefriert geklickt wird.
Das funktioniert wie erwartet, wenn der Stil der Textbox direkt an die SwellingTexblock Ressource festgelegt ist. Wenn jedoch der Stil des StyleWrapper Stil festgelegt, dass erbt von SwellingTexblock, ich die folgenden Ausnahme erhalten, wenn Sie die Maus (in Niederländisch) klicken:
Kan de naam EnlargeFont niet binnen het namenbereik van System.Windows.Style liefern.
Dies bedeutet so etwas wie: EnlargeFont kann nicht im Namen Umfang System.Windows.Style finden. Was ist passiert?
<Window x:Class="TriggerSpike.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window2" Height="300" Width="300">
<Window.Resources>
<Style x:Key="SwellingTextBlock" TargetType="TextBlock">
<Style.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<EventTrigger.Actions>
<BeginStoryboard Name="EnlargeFont">
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="FontSize"
To="60" Duration="0:0:10"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="FontSize"
To="12" Duration="0:0:.5"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="MouseDown">
<PauseStoryboard BeginStoryboardName="EnlargeFont"/>
</EventTrigger>
</Style.Triggers>
</Style>
<Style x:Key="StyleWrapper" BasedOn="{StaticResource SwellingTextBlock}"
TargetType="TextBlock"/>
</Window.Resources>
<StackPanel>
<TextBlock Style="{StaticResource StyleWrapper}">test</TextBlock>
</StackPanel>
</Window>
Lösung
Es scheint, dass dieses Verhalten „by design“ ist. Sie haben die Animation zu einem Control bewegen es Arbeit zu machen.
Sie können die vollständige Lösung finden hier