Я хочу, чтобы моя программа сначала открывала окно входа в систему (в виде диалогового окна) для входа в систему. После успешного входа в систему откройте главное окно, в котором отображаются различные меню в зависимости от разрешений учетной записи для входа.
Просто создайте диалоговое окно настроек из метода App.OnFrameworkInitializationCompleted и отобразите его с помощью MyLoginWindow.ShowDialog. Это не удается, поскольку ShowDialog требует родительского окна.
var window = new MyLoginWindow();
window.ShowDialog(ownerWindow);





Для диалогового окна в пользовательском интерфейсе Avalonia требуется родительское окно, поскольку оно является кроссплатформенным, а мобильные платформы (iOS и Android) не поддерживают концепции окна или диалога. Это сделано для обеспечения универсальной совместимости.
Однако есть способы обойти это. Вы можете представить свой диалог в качестве главного окна, а затем загрузить окно содержимого после входа в систему.
Однако лучший вариант — просто отказаться от устаревшей концепции модального диалога и создать представление, которое будет предшествовать представлению содержимого, работая в том же окне и даже в том же главном представлении. С помощью этого метода ваш MainView будет содержать ContentPresenter, а свойство Content будет заменено после успешного входа в систему. MainWindow не должен иметь кода приложения (в основном немодифицированного по сравнению с шаблоном по умолчанию), поскольку он будет служить только хостом в средах рабочего стола для MainView (мобильные приложения напрямую используют MainView). Я настоятельно рекомендую этот подход, поскольку он совместим с мобильными платформами, и даже если вы сейчас не планируете использовать мобильные устройства, вы можете передумать позже. Вы даже можете использовать TransitioningContentControl, чтобы добавить небольшую анимацию.