Изменение видимости элемента VisualElement не приводит к немедленной перерисовке приложения Maui для Windows.

Я пытаюсь установить видимость Frameпосле выполнения асинхронной задачи.

      bool condition = await DoWorkAsync();

if (condition)
{
   Dispatcher.Dispatch(() =>
   {
       myFrame.IsVisible = true;
   });
}

Когда я запускаю свое приложение, отладчик сообщает мне, что мой код вызывается диспетчером, но в окне приложения не отображается фрейм. (Рамка остается скрытой).

Если я изменю размер окна приложения или иным образом сделаю его «недействительным», мой фрейм станет видимым.

Есть ли способ принудительно сделать Invalidate в приложении Maui для Windows?

Если нет, есть ли другой способ установить видимость кадра из моего кода?

2 ответа

Добавление звонка в InvalidateMeasure()кажется, принудительно обновился.

      bool condition = await DoWorkAsync();

if (condition)
{
   Dispatcher.Dispatch(() =>
   {
       myFrame.IsVisible = true;
       this.InvalidateMeasure();
   });
}

У меня аналогичная проблема, и я нашел наихудшее из возможных решений (но оно все еще является обходным). я добавилLoadedобработчик событий в моем пользовательском элементе управления:

      private void CustomControl_Loaded(object sender, EventArgs e)
{
    (sender as StylePicker).IsVisible = ((VM)BindingContext).IsCustomControlVisible;
}

Это некрасиво и не работает должным образом, но этот обходной путь позволил мне как можно скорее решить проблему и отметить ее блестящим комментарием TODO. Надеюсь, кто-нибудь покажет нам, что здесь не так.

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