在我的FlipView中,我在DataTemplate中设置了VisualState触发器,以根据窗口宽度显示/隐藏网格。 DataTemplate内部的触发器在FlipView外部工作正常,但是当我将Grid放在FlipView DataTemplage内时,触发器永远不会触发。我在ListView中使用了这种技术没有问题,因此不确定这里有什么不同。
<FlipView>
<FlipView.ItemTemplate>
<DataTemplate>
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState>
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="View1.Visibility" Value="Collapsed" />
<Setter Target="View2.Visibility" Value="Visible" />
</VisualState.Setters>
</VisualState>
<VisualState>
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="700" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="View1.Visibility" Value="Visible" />
<Setter Target="View2.Visibility" Value="Collapsed" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid x:Name="View1"></Grid>
<Grid x:Name="View2"></Grid>
</Grid>
</DataTemplate>
</FlipView.ItemTemplate>
</FlipView>
答案 0 :(得分:0)
视觉状态在DataTemplate
内不起作用,除非顶级容器是Control
(请查看VisualStateManager.GoToState()
中的第一个参数在引擎盖下)。在你的情况下,它是Grid
所以它不起作用。
一个简单的解决方法是将Grid
包裹在UserControl
内,或ContentControl
包含空格式(请参阅我的其他答案{{3} })。
如果您已经在 Page 级别定义了这组视觉状态,并希望将相同的规则应用于页面中的某些DataTemplate
。请查看此here我使用Behavior
向下传递VisualStateGroup
引用,而不是复制它们,以便将所有MinWindowWidth
设置保存在一个位置。