在WPF中创建可扩展的“应用程序分组/集线器”

时间:2019-03-11 22:14:40

标签: c# wpf architecture grouping

我想找到一种优雅的方法来为WPF(C#)中的应用程序创建一个“集线器”。

我的意思是说,我有三个应用程序AppA,AppB和AppC,它们可能具有截然不同的UI(和逻辑),我想实现的是拥有一个包含图标的“登录页面”对于这三个应用程序。 现在,当用户单击其中一个图标时,“总体应用程序”会将用户重定向到该特定单击的应用程序的UI。

我可以想到两种方法来实现这一目标:

1)拥有一个包含3张图像的MainWindow,然后在ImageA_Click上->出现另一个窗口,其中包含AppA的用户界面。

2)拥有一个带有Tab控件的MainWindow,该控件具有3个选项卡(每个选项卡对应于3个应用程序中的每一个)->单击一个选项卡可将用户定向到所单击应用程序的特定UI。

我想要的是一种可扩展的体系结构,也就是说,明天要说,我必须再开发10个应用程序,我希望能够(无痛地)将额外的10个应用程序集成到整个解决方案中。< / p>

实现此目标的最佳方法是什么?

(请注意,我正在为每个应用程序使用MVC模式-不确定是否有任何区别)

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以在单独的页面中设计每个应用程序ui,然后使用框架和导航服务访问它们。像这样:

MainWindow.xaml:

<Window x:Class="Test.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"
        Loaded="MainWindow_OnLoaded">
    <Grid>
        <Frame Name="MainFrame"/>
    </Grid>
</Window>

MainWindow.xaml.cs:

using System.Windows;

namespace Test
{
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
        {
             MainFrame.NavigationService.Navigate(new HomePage());
             // OR
             MainFrame.NavigationService.Navigate(new App1Page());
             // OR
             MainFrame.NavigationService.Navigate(new App2Page());
             // OR
             MainFrame.NavigationService.Navigate(new App3Page());
        }
    }
}