使用WPF中的PageTransitions控制导航

时间:2015-04-16 07:02:45

标签: c# wpf

我有一个主窗口和两页。

在我的程序中我想要的是,当加载主窗口时,它会加载第一页(在主窗口内)并进行淡入淡出过渡。当我单击第一页中的按钮时,它应该删除第一页,第二页出现在主窗口中。

我使用Fyslexic Duck页面过渡来为页面的外观设置动画。

我的问题是当第一页加载到主窗口然后我点击第一页的按钮我不知道如何卸载第一页并使第二页在主窗口中显示转换。

这是我的代码:

MAIN WINDOW.XAML:

<Window x:Class="LoyaltyApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:pageTransitions="clr-namespace:WpfPageTransitions;assembly=WpfPageTransitions"
        Title="Loyalty Application" Height="694.5" Width="1305.5"
        ResizeMode="NoResize" Name="mainWindow" Loaded="mainWindow_Loaded">
    <!--<Window.Background>
        <ImageBrush ImageSource="Assets/home.png"/>
    </Window.Background>-->

    <Grid>

        <pageTransitions:PageTransition Name="pageTransitionControl" TransitionType="SlideAndFade">
        </pageTransitions:PageTransition>
  </Grid>

</Window>

MAIN WINDOW.CS

 private void mainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            Home newPage = new Home();
            pageTransitionControl.TransitionType = PageTransitionType.Fade;
            pageTransitionControl.ShowPage(newPage);

        }

HOME.XAML (第1页)

<UserControl x:Class="LoyaltyApp.Home"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="694.5" d:DesignWidth="1305.5">
    <UserControl.Background>
        <ImageBrush ImageSource="Assets/home.png"/>
    </UserControl.Background>
    <Grid>

<Button Content="Button" Width="203" Click="Button_Click_1"/>
    </Grid>
</UserControl>

HOME.CS (第1页)

private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            // Transitions to Next Page or Page 2
        }

PAGE2.CS

 private void Button_Click_1(object sender, RoutedEventArgs e)
            {
                // Transitions back to Home (Page1)
            }
 private void Button_Click_2(object sender, RoutedEventArgs e)
                {
                    // Transitions to Next Page or Page 3
                }

谢谢。希望得到你们的反馈。

转换参考链接: http://www.fyslexicduck.com/2011/05/page-transition-control-for-wpf.html

1 个答案:

答案 0 :(得分:0)

MainWindow.cs中,公开一个名为ShowPage的公共方法,该方法将新页面作为参数。

public void ShowPage(UserControl newPage)
{
    if (newPage != null)  
        pageTransitionControl.ShowPage(newPage);
}

然后在每个页面中,您都可以像这样访问此方法

((MainWindow)App.Current.MainWindow).ShowPage(newPage);

例如,从主页到PAGE2

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    ((MainWindow)App.Current.MainWindow).ShowPage(new PAGE2());
}

从PAGE2到PAGE3

((MainWindow)App.Current.MainWindow).ShowPage(new PAGE3());

从Page2 返回导航到Home是不同的,从链接,页面被推入堆栈,因此转换控件可能提供Goback()方法,而不是要求你导航到主页,就像这样

((MainWindow)App.Current.MainWindow).ShowPage(new Home());

但我不确定它是否有Goback()方法。