翻转动画后Silverlight屏幕模糊

时间:2011-05-11 08:42:16

标签: silverlight animation screen-resolution

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

我有实际的动画工作,除了屏幕上的项目有点模糊。当我回到那个也模糊的列表时。

任何人都可以提出原因。我已经在下面展示了我是如何实现翻转的。

             <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调用,我会执行反向动画以返回列表。所有这些都可以,但正如我所说,屏幕稍微模糊了。我不是在想象它,​​因为编辑屏幕是一个View / ViewModel,它也在其他地方使用,因此很容易比较。 是否需要在动画结束时正确地重绘屏幕?

1 个答案:

答案 0 :(得分:2)

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

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