Я использую адаптивные триггеры для двух различных UI в зависимости от того, когда мое приложение отображается в портретном или ландшафтном режиме:UI мерцает при использовании AdaptiveTrigger с Windows 10 UWP
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="narrowView">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="LogoPanel.VerticalAlignment"
Value="Stretch"/>
<Setter Target="LogoPanel.(Grid.RowSpan)" Value="2"/>
<Setter Target="LogoPanel.MinWidth" Value="0"/>
<Setter Target="Logo.Margin" Value="5,11,5,0"/>
<Setter Target="Logo.VerticalAlignment" Value="Center"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="wideView">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="550" />
</VisualState.StateTriggers>
<VisualState.Setters>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
Я извлекал немало из моих сеттеров для простоты, но всякий раз, когда моя страница открывается в первый раз, я вижу мерцание моего интерфейса в течение нескольких миллисекунд, но достаточно долго, чтобы увидеть, как он мерцает от пейзажного режима до портретного режима, когда мой телефон держится вертикально, т.е. портретный режим.
Есть ли способ убедиться, что установлен правильный адаптивный триггер? Есть ли способ проверить, что триггер по умолчанию при загрузке страницы?
Благодаря
ОБНОВЛЕНИЕ - 1:
К сожалению, я должен отметить, что эти адаптивные триггеры содержатся в UserControl
, который используется в качестве DataTemplate в Listview
.
UPDATE - 2:
Я попробовал то, что предложил @Quincy и это, безусловно, является улучшение при запуске, но это определенно не ведет себя так же при изменении размера App Store для Windows, так что мой код выглядит как это:
<Grid x:Name="NowNextGrid" Background="White" Visibility="Collapsed">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="narrowView">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="LogoPanel.VerticalAlignment"
Value="Stretch"/>
<Setter Target="LogoPanel.(Grid.RowSpan)" Value="2"/>
<Setter Target="LogoPanel.MinWidth" Value="0"/>
<Setter Target="Logo.Margin" Value="5,11,5,0"/>
<Setter Target="Logo.VerticalAlignment" Value="Center"/>
<Setter Target="NowNextGrid.Visibility" Value="Visible"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="wideView">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="550" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="NowNextGrid.Visibility" Value="Visible"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Grid>
Как вы можете видеть, я добавил имя моей сетки т.е. NowNextGrid и я устанавливаю по умолчанию Visibility
для Collapsed
по умолчанию и устанавливает его Visible
в VisualState.Setters как для узкогоView, так и для WideView.
Надеюсь, я правильно понял, что предложил @Quincy. Я буду продолжать искать, если есть лучший способ, но пока, я оставлю его, как будто кажется, что есть небольшая задержка, восстанавливающая мой Listview
, это лучше, чем мерцание.
Может быть, у вас есть наборы 'х: Phase' в вашем DataTemplate? –
Невозможно воспроизвести вашу проблему на моей стороне, возможно, вы можете опубликовать xaml-код своего пользовательского контроля. –
@AskTooMuch, нет x: Фаза. – Thierry