【问题标题】:Creating a scalable 'Application grouping/Hub' in WPF在 WPF 中创建可扩展的“应用程序分组/集线器”
【发布时间】:2019-03-12 18:08:24
【问题描述】:

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

我的意思是,比如说,我有三个应用程序 AppA、AppB 和 AppC,它们可能各自有非常不同的 UI(和逻辑),我想要实现的是拥有一个包含图标的“登陆页面”对于三个应用程序中的每一个。 现在,当用户单击其中一个图标时,“整体应用程序”会将用户重定向到该特定单击应用程序的 UI。

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

1) 有一个包含 3 个图像的主窗口,在 ImageA_Click 上 --> 另一个窗口出现在 AppA 的 UI 中。

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

我想要的是拥有一个可扩展的架构,也就是说,明天我必须再开发 10 个应用程序,我希望能够快速(且轻松地)将另外 10 个应用程序集成到整体解决方案中。

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

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

感谢您的帮助!

【问题讨论】:

    标签: c# wpf architecture grouping


    【解决方案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());
            }
        }
    }
    

    【讨论】:

    • 感谢您的回答。在使用 MainFrame 的这种情况下,HomePage、App1Page 等会是什么?它们是单独的窗口吗?
    • MainFrame 是 App 内容的容器,您可以使用导航服务更改框架内容。看到这个sample
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 2012-06-22
    • 2010-09-09
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多