C#WPF框架如何在页面上创建幻灯片效果?

时间:2016-01-08 03:24:51

标签: c# wpf slide

我想在WPF,Frame控件上制作页面幻灯片效果。 我们走了。

首先,我放了一个框架和2个导航按钮:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="25"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="25"/>
    </Grid.ColumnDefinitions>
    <Frame x:Name="frame" Source="page1.xaml" Grid.Column="1" />
    <Button Grid.Column="0" Content="&lt;" Click="GoPrevious"/>
    <Button Grid.Column="2" Content="&gt;" Click="GoNext"/>
</Grid>

然后我创建了3种不同颜色的页面:Page1.xaml,Page2.xaml和Page3.xaml

现在点击导航按钮时,只需导航到uri:

frame.Navigate(new Uri("page2.xaml", UriKind.Relative));

完成。现在我想在导航时让每个页面都滑动(每个人都想要它)。 所以我的计划是设置每个页面的Loaded EventTrigger:

<Page.Triggers>
    <EventTrigger RoutedEvent="FrameworkElement.Loaded">
        <BeginStoryboard>
            <Storyboard>
                <ThicknessAnimation Duration="0:0:0.75" Storyboard.TargetProperty="Margin" From="500,0,-500,0" To="0" />
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
    <EventTrigger RoutedEvent="FrameworkElement.Unloaded">
        <BeginStoryboard>
            <Storyboard>
                <ThicknessAnimation Duration="0:0:0.75" Storyboard.TargetProperty="Margin" From="0" To="-500,0,500,0" />
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</Page.Triggers>

它有效!一切顺利,直到我发现页面不连续,意味着,当你导航到page2时,page1将立即卸载,而不是开始加载page2的事件。我试图设置page1的卸载事件,但不起作用。

我想要的是,当page1开始退出时,page2应该立即上台,就像火车一个接一个。

那怎么办?感谢。

1 个答案:

答案 0 :(得分:4)

我是使用单独的FramePage完成的。好像我们试图在网站上显示新的网页,如果不使用某些技巧就不可能。这里的情况也是如此。对于滑动效果,StackPanelOrientation=Horizontal看起来没问题。

注意:在Frame样式中,我使用主Grid(Grd)来设置宽度,就像我们向StackPanel添加子(新Frame)一样,它的宽度会增加。

你可以建立在这个概念的基础上。

<Grid Background="#FF33CF2C" x:Name="Grd">
    <StackPanel x:Name="StkPnl" Orientation="Horizontal">
        <StackPanel.Resources>
            <Style TargetType="Frame">
                <Setter Property="Margin" Value="0,50,0,0"/>
                <Setter Property="Width" Value="{Binding ActualWidth, ElementName=Grd}"/>
                <Setter Property="NavigationUIVisibility" Value="Hidden"/>
            </Style>                
        </StackPanel.Resources>
        <Frame x:Name="FramePage1" Source="/WpfNavigation;component/Sliding/Page1.xaml" />
    </StackPanel>
    <Button Content="Goto Page2" HorizontalAlignment="Left" Margin="114,18,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click">
        <Button.Triggers>
            <EventTrigger RoutedEvent="ButtonBase.Click">
                <BeginStoryboard>
                    <Storyboard Storyboard.TargetName="FramePage1" Storyboard.TargetProperty="Margin">
                        <ThicknessAnimation To="-2000 , 50 , 0, 0" Duration="0:0:5"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Button.Triggers>
    </Button>
</Grid>

代码隐藏

private void Button_Click(object sender, RoutedEventArgs e)
        {
            Frame f = new Frame();
            f.Source = new Uri("pack://application:,,,/Sliding/Page2.xaml", UriKind.Absolute);

            StkPnl.Children.Add(f);          
        }

Sliding pages using stackpanel

相关问题