Изменение видимости элемента 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. Надеюсь, кто-нибудь покажет нам, что здесь не так.