Анимация при изменении ContentTemplate - PullRequest
0 голосов
/ 23 сентября 2011

У меня есть окно, где разные элементы управления должны были отображаться с течением времени.Я искал решение с использованием паттерна mvvm и в итоге получил

<ContentControl Content="{Binding}">
        <ContentControl.Style>
            <Style TargetType="ContentControl">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ViewType}" Value="RecipeList">
                        <Setter Property="ContentTemplate" Value="{StaticResource RecipeTemplate}"/>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding ViewType}" Value="Default">
                        <Setter Property="ContentTemplate" Value="{StaticResource DefaultTemplate}"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ContentControl.Style>
</ContentControl>

Пока это работает нормально, но мне любопытно две вещи:

  1. Есть ли лучший подход с mvvm?
  2. как я могу выполнить анимацию для элементов в новой таблице данных, которая должна быть показана?

Ответы [ 2 ]

1 голос
/ 23 сентября 2011

На вопрос № 2:

Вы можете использовать EventTrigger в элементах управления в своих шаблонах, чтобы запустить анимацию, как показано ниже:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.Triggers>
            <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                <BeginStoryboard>
                    <Storyboard x:Name="SomeStoryBoard"/>
                </BeginStoryboard>
            </EventTrigger>
        </Grid.Triggers>
    </Grid>
</Window>
1 голос
/ 23 сентября 2011

Поскольку анимации являются действиями для конкретного вида, их следует запускать из кода за представлением, а не из модели представления.Раньше я подключался к событию и просто запускал из выделенного кода следующее:

Storyboard animation = (Storyboard)panel.FindResource("MyAnimation");
animation.Begin();

Что касается вопроса № 1, я не вижу никаких проблем с вашим кодом для отображениядругой вид на основе свойства в ViewModel.

...