在 WinRT 中,许多动画根本不显示任何中间值,或者仅在移动鼠标或发生其他一些系统事件时才显示它们,这很奇怪。在动画结束时,值被正确设置,但在执行期间(在我的例子中动画的 2 秒持续时间),中间值永远不会显示。
2 秒后,窗口消失,但当您按 X 时,您看不到它翻转。有时,如果您在动画过程中移动鼠标,您可以看到它,但这通常仅在 XAML 图形更复杂时才会发生。
这是 XAML:
<Grid Background="#525252">
<Grid x:Name="AnimatedDialog"
HorizontalAlignment="Center"
VerticalAlignment="Center">
<Grid.Projection>
<PlaneProjection />
</Grid.Projection>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Border Grid.RowSpan="2"
Grid.ColumnSpan="2"
Background="White"
BorderBrush="#2E2E2E"
BorderThickness="1" />
<Border Background="#2E2E2E" />
<TextBlock Grid.Row="0"
Grid.Column="0"
Margin="10,5"
HorizontalAlignment="Left"
VerticalAlignment="Center"
FontFamily="Segoe UI"
FontSize="20"
FontWeight="SemiBold"
Text="{Binding Title,
ElementName=Root,
FallbackValue='This is the title'}" />
<Border Grid.Row="0"
Grid.Column="1"
Width="40"
Height="40"
HorizontalAlignment="Right"
VerticalAlignment="Top"
Background="#BD0000"
BorderThickness="0"
Padding="0"
PointerReleased="CloseBorder_OnPointerReleased" />
<TextBlock Grid.Row="0"
Grid.Column="1"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontFamily="Segoe UI Symbol"
FontSize="22"
Foreground="White"
IsHitTestVisible="False"
Text="❌" />
<TextBlock Grid.Row="1"
Grid.Column="0"
Grid.ColumnSpan="2"
Width="550"
Height="360"
Margin="10"
FontSize="22"
Foreground="Black"
IsHitTestVisible="False"
Text="Bacon ipsum dolor amet boudin ground round drumstick porchetta prosciutto spare ribs short ribs bresaola leberkas hamburger sirloin shank tri-tip turkey strip steak. Rump boudin shank, ham hock bresaola shankle shoulder. Alcatra landjaeger kevin tail hamburger turducken flank pork. Meatloaf turducken leberkas, pig sausage pancetta ground round. Beef kevin swine tongue ham hock bacon shoulder leberkas kielbasa rump capicola ribeye chicken shankle venison. Biltong ball tip prosciutto, t-bone cow pork ribeye pancetta strip steak jowl ham drumstick landjaeger short ribs andouille. Turducken tail shankle bacon, pork turkey filet mignon ham pig."
TextWrapping="WrapWholeWords" />
</Grid>
</Grid>
以及背后的代码:
private void CloseBorder_OnPointerReleased(object sender, PointerRoutedEventArgs e)
{
// Spin AnimatedDialog to close.
var storyboard = new Storyboard();
var projection = AnimatedDialog.Projection as PlaneProjection;
projection.CenterOfRotationY = 0.5;
var flipAnim = new DoubleAnimation();
Storyboard.SetTarget(flipAnim, projection);
Storyboard.SetTargetProperty(flipAnim, "RotationX");
// 2 second flip
flipAnim.Duration = new Duration(new TimeSpan(0, 0, 2));
flipAnim.EasingFunction = new QuadraticEase {EasingMode = EasingMode.EaseIn};
flipAnim.From = 0;
flipAnim.To = 90;
storyboard.Children.Add(flipAnim);
storyboard.Completed += StoryboardOnCompleted;
storyboard.Begin();
}
private void StoryboardOnCompleted(object sender, object o)
{
Debug.WriteLine("Completed storyboard.");
}
最佳答案
出于某种原因,当您使用接近零但实际上并非零的值时,它会起作用。
private void CloseBorder_OnPointerReleased(object sender, PointerRoutedEventArgs e)
{
// Spin AnimatedDialog to close.
var storyboard = new Storyboard();
var projection = AnimatedDialog.Projection as PlaneProjection;
projection.CenterOfRotationY = 0.5;
projection.RotationX = .0000000001; // <--- this line changed
var flipAnim = new DoubleAnimation();
Storyboard.SetTarget(flipAnim, projection);
Storyboard.SetTargetProperty(flipAnim, "RotationX");
// 2 second flip
flipAnim.Duration = new Duration(new TimeSpan(0, 0, 2));
flipAnim.EasingFunction = new QuadraticEase { EasingMode = EasingMode.EaseIn };
flipAnim.From = projection.RotationX; // <--- this line changed
flipAnim.To = 90;
storyboard.Children.Add(flipAnim);
storyboard.Completed += StoryboardOnCompleted;
storyboard.Begin();
}
private void StoryboardOnCompleted(object sender, object o)
{
Debug.WriteLine("Completed storyboard.");
}
关于.net - WinRT 动画不显示中间值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26986296/