Создание масштабируемой «группировки приложений / концентратора» в WPF - PullRequest
0 голосов
/ 12 марта 2019

Я хотел бы найти элегантный способ создания «хаба» для приложений в WPF (C #).

Я имею в виду, скажем, у меня есть три приложения AppA, AppB и AppC, которые могуту меня очень разные пользовательские интерфейсы (и логика), чего я хотел бы добиться, так это иметь одну «целевую страницу», содержащую значки для каждого из трех приложений.Теперь, когда пользователь нажимает на один из значков, «Общее приложение» перенаправляет пользователя в пользовательский интерфейс для этого конкретного приложения, по которому щелкнули.

Я могу придумать два способа добиться этого:

1) Имейте MainWindow с 3 изображениями, и на ImageA_Click -> появляется другое окно с пользовательским интерфейсом для AppA.

2) Имейте MainWindow с Tabcontrol, который имеет 3 вкладки (каждая вкладка соответствует каждой изthe 3 Apps) -> Нажатие на одну вкладку направляет пользователя к определенному пользовательскому интерфейсу для приложения, по которому щелкнули.

Я хочу иметь масштабируемую архитектуру, то есть, скажем, завтра я должен разработатьЕще 10 приложений, я хочу иметь возможность быстро (и безболезненно) интегрировать дополнительные 10 приложений в общее решение.

Каков наилучший способ добиться этого?

(Обратите внимание, что яя использую шаблон MVC для каждого из приложений - не уверен, если это имеет какое-либо значение)

Я ценю любую помощь!

1 Ответ

1 голос
/ 12 марта 2019

Вы можете создать каждый пользовательский интерфейс приложения на отдельной странице, используя для этого доступ к ним через фрейм и службу навигации.Например:

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());
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...