Как отобразить диалоговое окно (Вход) перед MainWindow в Авалонии?

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

Просто создайте диалоговое окно настроек из метода App.OnFrameworkInitializationCompleted и отобразите его с помощью MyLoginWindow.ShowDialog. Это не удается, поскольку ShowDialog требует родительского окна.

var window = new MyLoginWindow();
window.ShowDialog(ownerWindow);
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для диалогового окна в пользовательском интерфейсе Avalonia требуется родительское окно, поскольку оно является кроссплатформенным, а мобильные платформы (iOS и Android) не поддерживают концепции окна или диалога. Это сделано для обеспечения универсальной совместимости.

Однако есть способы обойти это. Вы можете представить свой диалог в качестве главного окна, а затем загрузить окно содержимого после входа в систему.

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

Другие вопросы по теме

Добавление кнопки в представление, которая перенаправляет пользователя в другое представление в Авалонии с помощью Community Toolkit и MVVM
Ошибка Avalonia AVLN: 0004: невозможно разрешить свойство или метод с именем «Test» для типа «Avalonia_Blog.Models.Post»
ProgressBar не обновляется при изменении значения в методе OnLoaded
Как привязать ListBoxItem.IsSelected к свойству в ViewModel?
Запуск приложения Android через действие с фильтром намерений приводит к изменению значка и названию приложения как «Сервисы Google Play»
Авалония, как предотвратить обновление текстового поля при каждом нажатии клавиши?
Инструментарий сообщества MVVM, обеспечивающий синхронизацию двух представлений с одной моделью в приложении Avalonia
Зависание окна сообщений пользовательского интерфейса Avalonia
Может ли папка ресурсов Avalonia находиться в общем месте за пределами папки проекта?
Как узнать размер изображения в avalonia для Android?