Анимация изменения свойства WPF MVVM

Я придерживался стандартного C/C++ в течение многих лет прежде, чем изучить API Win32 и быть довольно тупым, "изучение, что часть" API Win32 не является лучшим техническим опытом моей жизни.

В одном ручном API Win32 довольно прохладно. Это похоже на расширение стандартного API C (кому нужно fopen, когда Вы можете иметь CreateFile. Но я предполагаю, что UNIX/Linux/WhateverOS имеют те же функции штуковины. Так или иначе, в Unix/Linux, они имеют, "Все - файл". В Windows они имеют, "Все - a... Окно" (никакое ребячество! См. CreateWindow!).

В другой руке, это - API прежней версии. Вы будете иметь дело с сырыми данными C и сырыми данными C безумие.

  • Как сообщение структуры его собственный размер для прохождения void * указатель на некоторую функцию Win32.
  • Обмен сообщениями может довольно сбивать с толку, также: Смешивание объектов C++ с окнами Win32 приводит к очень интересным примерам Курица или Яйцо проблема (забавные моменты, когда Вы пишете своего рода delete this ; в методе класса).
  • Необходимость разделить WinProc на подклассы, когда Вы более знакомы с объектным наследованием, является разделением головы и менее, чем оптимальный.
  • И конечно, существует радость" , Почему в этом мире гидроразрыва они сделали эту вещь этот путь?? " моменты, когда Вы ударяете свою клавиатуру Вашей головой однажды слишком многие и возвращаетесь домой с ключами, выгравированными в Вашем лбу, просто потому что кто-то думал, что он более логичный записал API для включения изменения цвета "Окна", не путем изменения одного из его свойств, а путем выяснения у него к его родительскому окну.
  • и т.д.

В последней руке ( три руки??? ), полагайте, что некоторые люди, работающие с API прежней версии, самостоятельно используют моделирование унаследованного кода. Момент, который Вы слышите" const, для макетов " или" я не использую пространства имен, потому что они уменьшают скорость во время выполнения ", или еще лучше" Эй, кому нужен C++? Я кодирую в своем собственном бренде объектно-ориентированного C!!! " (Никакое ребячество... В профессиональной среде и результате был настоящий вид...), Вы будете чувствовать, что вид страха только осудил чувство перед гильотина .

Так... В целом, это интересно опыт.

Редактирование

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

иногда интересно (а также разбивающий) знать, как вещи работают под капотом. Вы поймете что, несмотря на огромный (невозможный?) ограничения, команда API Win32 сделала замечательную работу, чтобы быть уверенной, что все, от Вас "программа olde Win16" к Вашему "последнему Win64 чрезмерное приложение", может сотрудничать, в прошлом теперь, и в будущем.

вопрос: Вы действительно хотите?

, поскольку, проводя недели, чтобы сделать вещи, которые могли быть сделаны (и добиты большего успеха) в другом более высокоуровневом и/или объектно-ориентированном API может быть вполне de-motivational (реальный опыт: 3 недели для API Победы, против 4 часов на трех других языках и/или библиотеках).

Так или иначе, Вы найдете Блог Raymond Chen очень интересным из-за представления его инсайдера и о API Победы и о его эволюции в течение лет:

https://blogs.msdn.microsoft.com/oldnewthing /

10
задан cjibo 30 October 2009 в 13:31
поделиться

2 ответа

Вот решение, к которому я пришел. Чтобы сделать анимацию на основе данных в моей модели просмотра, я использовал DataTrigger. Ниже приведен мой стиль управления.

<Style TargetType="Grid" x:Key="DetailRotation" >
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=AnimationState}" Value="New">
            <DataTrigger.EnterActions>
                <StopStoryboard BeginStoryboardName="EndAnimation" />
                <BeginStoryboard Name="NewAnimation">
                    <Storyboard>
                        <ThicknessAnimation Storyboard.TargetProperty="Margin" From="0,30,0,0" To="0,0,0,0" Duration="0:0:1" />
                        <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:1" />
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
            <DataTrigger.ExitActions>

            </DataTrigger.ExitActions>

        </DataTrigger>
        <DataTrigger Binding="{Binding Path=AnimationState}" Value="End">
            <DataTrigger.EnterActions>
                <StopStoryboard BeginStoryboardName="NewAnimation" />
                <BeginStoryboard Name="EndAnimation">
                    <Storyboard>
                        <ThicknessAnimation Storyboard.TargetProperty="Margin" From="0,0,0,0" To="0,-20,0,0" Duration="0:0:1"/>
                        <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:1" />
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
        </DataTrigger>

    </Style.Triggers>
</Style>
17
ответ дан 3 December 2019 в 20:42
поделиться

Вы можете изучить, используя Attached Properties , чтобы подключить необходимую логику к раскадровке / анимации, которая вы желаете.

Это не обязательно избавит вас от необходимости писать код, но сохранит его отдельно от представления и позволит повторно использовать его в нескольких представлениях.

1
ответ дан 3 December 2019 в 20:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: