Преобразование шаблона данных WPF Swipe Transition с DataTriggers в Silverlight4

У меня есть следующий шаблон данных в приложении WPF, над которым я работаю. Это обеспечивает потрясающий переход смахиванием и изначально было взято из этой записи в блоге.

Что я хотел бы сделать, так это заставить то же самое работать в Silverlight 4. К моему ужасу, в SL4 отсутствуют DataTriggers и некоторые раскадровки. Может ли кто-нибудь пролить свет на эквиваленты? В качестве альтернативы, можете ли вы указать переход смахиванием в Интернете в Silverlight, который я могу переманить? Спасибо!!

Переход смахиванием

<DataTemplate x:Key="SwipeTransition">
        <DataTemplate.Resources>
            <Visibility x:Key="Visible">Visible</Visibility>
            <Storyboard x:Key="SlideStoryboard">
                <DoubleAnimation 
                    Storyboard.TargetName="container" 
                    Storyboard.TargetProperty="RenderTransform.(TranslateTransform.X)"
                    From="0" FillBehavior="Stop"
                    Duration="0:0:0.3"
                    DecelerationRatio="1.0"/>
                <ObjectAnimationUsingKeyFrames 
                    Storyboard.TargetName="a" 
                    Storyboard.TargetProperty="Visibility" 
                    Duration="0:0:0.3" FillBehavior="Stop">
                    <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{StaticResource Visible}" />
                </ObjectAnimationUsingKeyFrames>
                <ObjectAnimationUsingKeyFrames 
                    Storyboard.TargetName="b"
                    Storyboard.TargetProperty="Visibility" 
                    Duration="0:0:0.3" FillBehavior="Stop">
                    <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{StaticResource Visible}" />
                </ObjectAnimationUsingKeyFrames>
            </Storyboard>
        </DataTemplate.Resources>
        <Grid ClipToBounds="True">
            <Common:Transition x:Name="transition" Source="{Binding}" />
            <Grid Name="container">
                <Grid.RenderTransform>
                    <TranslateTransform X="{Binding ElementName=container, Path=ActualWidth, Converter={StaticResource NegativeConverter}}" />
                </Grid.RenderTransform>
                <ContentControl Name="a" Visibility="Hidden" Content="{Binding ElementName=transition, Path=DisplayA}" />
                <ContentControl Name="b" Visibility="Hidden" Content="{Binding ElementName=transition, Path=DisplayB}" />
            </Grid>
        </Grid>
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding ElementName=transition, Path=State}" Value="A">
                <Setter TargetName="a" Property="Visibility" Value="Visible" />
                <Setter TargetName="a" Property="RenderTransform">
                    <Setter.Value>
                        <TranslateTransform X="{Binding ElementName=container, Path=ActualWidth}" />
                    </Setter.Value>
                </Setter>
                <DataTrigger.EnterActions>
                    <BeginStoryboard Storyboard="{StaticResource SlideStoryboard}" />
                </DataTrigger.EnterActions>
            </DataTrigger>
            <DataTrigger Binding="{Binding ElementName=transition, Path=State}" Value="B">
                <Setter TargetName="b" Property="Visibility" Value="Visible" />
                <Setter TargetName="b" Property="RenderTransform">
                    <Setter.Value>
                        <TranslateTransform X="{Binding ElementName=container, Path=ActualWidth}" />
                    </Setter.Value>
                </Setter>
                <DataTrigger.EnterActions>
                    <BeginStoryboard Storyboard="{StaticResource SlideStoryboard}" />
                </DataTrigger.EnterActions>
            </DataTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>     

Что применяется следующим образом

<ContentControl x:Name="_exampleView" Content="{Binding SelectedExample.View}"
                            ContentTemplate="{StaticResource SwipeTransition}"/>

person Dr. Andrew Burnett-Thompson    schedule 09.02.2012    source источник


Ответы (1)


сначала большое спасибо за ссылку.

Возможно, вам следует взглянуть на этот пост Как создать Триггер данных, подобный WPF, в Silverlight? они заявили, что VSM — это то, что нужно для Silverlight.

person blindmeis    schedule 09.02.2012
comment
Привет, и спасибо :) Да, я не слишком разбираюсь в VSM или Silverlight, если уж на то пошло. Я интегрировал вышеперечисленное с приложением WPF, но я также пишу кросс-платформенный эквивалент в SL4. Я думаю, что весь эквивалент VSM для раскадровки тоже был бы полезен. Можете ли вы пролить свет или намеки на то, как я мог бы реализовать это? Собираюсь поискать VSM и немного изучить, но любая информация вообще будет с благодарностью получена! - person Dr. Andrew Burnett-Thompson; 09.02.2012