Экран Silverlight, размытый после флип-анимации - PullRequest
1 голос
/ 11 мая 2011

Я создал флип-анимацию для перехода от списка элементов к диалогу редактирования. Например, пользователь видит список элементов, дважды щелкает элемент, чтобы отредактировать его, и экран переворачивается, чтобы отобразить диалог редактирования с подробной информацией.

Реальная анимация работает за исключением того, что элементы на экране слегка размыты. Когда я возвращаюсь к списку, он также размыт.

Может кто-нибудь предложить причину этого. Ниже я показал, как я достиг флип.

             <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 Ответ

2 голосов
/ 03 августа 2011

Добавьте следующие обработчики событий.-360 или вращение на 360 градусов вызывает проблему и должно быть заменено на 0 после анимации.

FlipToEditEnd.Completed += (a, b) => { ContentProjection.RotationY = 0.0; };
FlipToListEnd.Completed += (a, b) => { ContentProjection.RotationY = 0.0; };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...