Silverlight 屏幕在翻转动画后模糊



我创建了一个翻转动画,可以从项目列表转到编辑对话框。例如,用户看到项目列表,双击项目进行编辑,屏幕翻转以显示包含详细信息的编辑对话框。

我有实际的动画工作,除了屏幕上的项目略微模糊。当我翻回列表时,它也模糊了。

谁能提出原因。我在下面展示了我是如何实现翻转的。

             <ContentControl x:Name="EditPtrMainContent" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                <ContentControl.Resources>
                    <Storyboard x:Name="FlipToEditStart">
                        <DoubleAnimation From="0" To="90" Duration="0:0:0.3" Storyboard.TargetName="ContentProjection" Storyboard.TargetProperty="RotationY"/>
                    </Storyboard>
                    <Storyboard x:Name="FlipToEditEnd">
                        <DoubleAnimation From="270" To="360" Duration="0:0:0.3" Storyboard.TargetName="ContentProjection" Storyboard.TargetProperty="RotationY"/>
                    </Storyboard>
                    <Storyboard x:Name="FlipToListStart">
                        <DoubleAnimation From="0" To="-90" Duration="0:0:0.3" Storyboard.TargetName="ContentProjection" Storyboard.TargetProperty="RotationY"/>
                    </Storyboard>
                    <Storyboard x:Name="FlipToListEnd">
                        <DoubleAnimation From="-270" To="-360" Duration="0:0:0.3" Storyboard.TargetName="ContentProjection" Storyboard.TargetProperty="RotationY"/>
                    </Storyboard>
                </ContentControl.Resources>
                <ContentControl.Projection>
                    <PlaneProjection x:Name="ContentProjection"/>
                </ContentControl.Projection>
            </ContentControl>

在代码隐藏中(本质上是一个 MVVM 应用程序,但我很高兴动画控件在视图中,因为它是可视化的)

        public EditPtrView()
    {
        InitializeComponent();
        Loaded += OnLoaded;
        Unloaded += OnUnloaded;
        FlipToEditStart.Completed += OnFlipToEditStartCompleted;
        FlipToListStart.Completed += OnFlipToListStartCompleted;
    }
    void OnFlipToListStartCompleted(object sender, EventArgs e)
    {
        EditPtrMainContent.Content = new EditPtrView();
        FlipToListEnd.Begin();
    }
    void OnFlipToEditStartCompleted(object sender, EventArgs e)
    {
        EditPtrMainContent.Content = new NamedTransferView();
        FlipToEditEnd.Begin();
    }
    void OnLoaded(object sender, RoutedEventArgs e)
    {
        // register for MVVM Light messages
        AppMessages.SetFocusMessage.Register(this, OnSetFocus);
        AppMessages.CloseScreenMessage.Register(this, OnCloseScreen);
        AppMessages.ViewLoadedMessage.Send(ViewTypes.BookingsListView);
    }
    void OnUnloaded(object sender, RoutedEventArgs e)
    {
        AppMessages.SetFocusMessage.Unregister(this, OnSetFocus);
        AppMessages.CloseScreenMessage.Unregister(this, OnCloseScreen);
    }
    #region MVVM Light Message Delegates
    private void OnCloseScreen(string screenName)
    {
        switch (screenName)
        {
            case "PtrEdit":
                FlipToListStart.Begin();
                break;
        }
    }
    #endregion
    private void TransfersDataGridDoubleClick(object sender, MouseButtonEventArgs e)
    {
        ShowEditScreen();
    }
    private void EditPtrButtonClick(object sender, RoutedEventArgs e)
    {
        ShowEditScreen();
    }
    private void ShowEditScreen()
    {
        FlipToEditStart.Begin();
    }

如您所见,我在双击(或按钮单击)时开始动画的前半部分,并将动画化为 90 度。然后,当此动画完成时,我将 ContentControl 的内容更改为新屏幕,并开始第二个动画,从 270 度变为 360 度。使用来自编辑屏幕的 MVVM Light Messenger 调用,我执行反向动画以返回到列表。所有这些都工作正常,但正如我所说,屏幕略微模糊。我不是在想象它,因为编辑屏幕是一个视图/视图模型,也在其他地方使用,因此很容易比较。动画结束时是否需要执行某些操作才能正确重绘屏幕?

添加以下事件处理程序。 -360 度或 360 度旋转会导致问题,必须在动画后替换为 0。

FlipToEditEnd.Completed += (a, b) => { ContentProjection.RotationY = 0.0; };
FlipToListEnd.Completed += (a, b) => { ContentProjection.RotationY = 0.0; };

最新更新