用于在表单之间导航的路由 class
Routing class for navigation between forms
我是 C# 和面向对象编码的新手,因此我想知道如何创建路由 class 以便在 .Net Framework WPF 应用程序中的表单之间导航。
目前我正在这样的表单之间导航:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
new Classes.SessionService();
}
private void Customer_Page_click(object sender, RoutedEventArgs e)
{
CustomerPage CP = new CustomerPage();
CP.Show();
this.Close();
}
private void Staff_Menu_click(object sender, RoutedEventArgs e)
{
Forms.StaffPage SP = new Forms.StaffPage();
SP.Show();
this.Close();
}
private void Exit_click(object sender, RoutedEventArgs e)
{
this.Close();
}
}
有人告诉我最好创建一个路由 class,因为它会更多地分隔代码,但我还没有找到在表单之间导航的示例,只能在网页之间导航。
我强烈建议您在开始创建自己的基础架构之前使用现有的库。 (我通过艰难的方式学会了它,并最终使用了 prism ;))还有其他很棒的图书馆。只需转到 youtube 并搜索 "c# prism outlook",那里有来自 brian lagunas 的非常好的棱镜教程。
编辑:
只是为了给你一个基本的想法,你可以如何自己解决这个问题:
主要Windowxaml:
<Window x:Class="WpfTestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfTestApp"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
<RowDefinition Height="*"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<WrapPanel Grid.Row="0" x:Name="Ribbon"/>
<ContentPresenter Grid.Row="1" x:Name="Content"/>
<StackPanel Grid.Row="2">
<Button Grid.Row="0" Content="SetContentFormA" Click="Button_Click"/>
<Button Grid.Row="0" Content="SetContentFormB" Click="Button_Click_1"/>
<Button Grid.Row="0" Content="AddNewFormAToRibbon" Click="Button_Click_2"/>
<Button Grid.Row="0" Content="RemoveFormBFromRibbon" Click="Button_Click_3"/>
</StackPanel>
</Grid>
MainWindow.cs:
public partial class MainWindow : Window
{
private FormB b;
public MainWindow()
{
InitializeComponent();
PageControler.Content = Content;
PageControler.Ribbon = Ribbon;
b = new FormB();
Ribbon.Children.Add(b);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
PageControler.SetContent(new FormA());
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
PageControler.SetContent(new FormB());
}
private void Button_Click_2(object sender, RoutedEventArgs e)
{
PageControler.AddToRibbon(new FormA());
}
private void Button_Click_3(object sender, RoutedEventArgs e)
{
PageControler.RemoveFromRibbon(b);
}
}
页面控制器:
public static class PageControler
{
public static ContentPresenter Content { get; set; }
public static WrapPanel Ribbon { get; set; }
public static void SetContent(UserControl control)
{
Content.Content = control;
}
public static void AddToRibbon(UserControl control)
{
Ribbon.Children.Add(control);
}
public static void RemoveFromRibbon(UserControl control)
{
Ribbon.Children.Remove(control);
}
}
FormA (& B):
<UserControl x:Class="WpfTestApp.FormA"
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"
xmlns:local="clr-namespace:WpfTestApp"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid Background="Violet">
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Text="Form A"/>
</Grid>
你也可以
我是 C# 和面向对象编码的新手,因此我想知道如何创建路由 class 以便在 .Net Framework WPF 应用程序中的表单之间导航。
目前我正在这样的表单之间导航:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
new Classes.SessionService();
}
private void Customer_Page_click(object sender, RoutedEventArgs e)
{
CustomerPage CP = new CustomerPage();
CP.Show();
this.Close();
}
private void Staff_Menu_click(object sender, RoutedEventArgs e)
{
Forms.StaffPage SP = new Forms.StaffPage();
SP.Show();
this.Close();
}
private void Exit_click(object sender, RoutedEventArgs e)
{
this.Close();
}
}
有人告诉我最好创建一个路由 class,因为它会更多地分隔代码,但我还没有找到在表单之间导航的示例,只能在网页之间导航。
我强烈建议您在开始创建自己的基础架构之前使用现有的库。 (我通过艰难的方式学会了它,并最终使用了 prism ;))还有其他很棒的图书馆。只需转到 youtube 并搜索 "c# prism outlook",那里有来自 brian lagunas 的非常好的棱镜教程。
编辑: 只是为了给你一个基本的想法,你可以如何自己解决这个问题:
主要Windowxaml:
<Window x:Class="WpfTestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfTestApp"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
<RowDefinition Height="*"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<WrapPanel Grid.Row="0" x:Name="Ribbon"/>
<ContentPresenter Grid.Row="1" x:Name="Content"/>
<StackPanel Grid.Row="2">
<Button Grid.Row="0" Content="SetContentFormA" Click="Button_Click"/>
<Button Grid.Row="0" Content="SetContentFormB" Click="Button_Click_1"/>
<Button Grid.Row="0" Content="AddNewFormAToRibbon" Click="Button_Click_2"/>
<Button Grid.Row="0" Content="RemoveFormBFromRibbon" Click="Button_Click_3"/>
</StackPanel>
</Grid>
MainWindow.cs:
public partial class MainWindow : Window
{
private FormB b;
public MainWindow()
{
InitializeComponent();
PageControler.Content = Content;
PageControler.Ribbon = Ribbon;
b = new FormB();
Ribbon.Children.Add(b);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
PageControler.SetContent(new FormA());
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
PageControler.SetContent(new FormB());
}
private void Button_Click_2(object sender, RoutedEventArgs e)
{
PageControler.AddToRibbon(new FormA());
}
private void Button_Click_3(object sender, RoutedEventArgs e)
{
PageControler.RemoveFromRibbon(b);
}
}
页面控制器:
public static class PageControler
{
public static ContentPresenter Content { get; set; }
public static WrapPanel Ribbon { get; set; }
public static void SetContent(UserControl control)
{
Content.Content = control;
}
public static void AddToRibbon(UserControl control)
{
Ribbon.Children.Add(control);
}
public static void RemoveFromRibbon(UserControl control)
{
Ribbon.Children.Remove(control);
}
}
FormA (& B):
<UserControl x:Class="WpfTestApp.FormA"
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"
xmlns:local="clr-namespace:WpfTestApp"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid Background="Violet">
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Text="Form A"/>
</Grid>
你也可以