在我的FlipView中,我在DataTemplate中设置了VisualState触发器,以显示/隐藏基于窗口宽度的网格。DataTemplate内部的触发器在FlipView之外运行良好,但当我将网格放置在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>发布于 2017-09-09 01:58:08
除非顶层容器是一个DataTemplate (请查看VisualStateManager.GoToState()中的第一个参数,它在引擎盖下被调用),否则视觉状态在VisualStateManager.GoToState()中不起作用。在你的例子中,它是一个Grid,所以它不能工作。
一个简单的解决方法是,将您的Grid UserControl**,或** ContentControl 中的封装到一个空的样式中(参见其他答案here)。
如果您已经在页面级别定义了这组可视状态,并且希望对页面中的某些DataTemplate应用相同的规则。看看这个answer,在这里,我使用Behavior来传递VisualStateGroup引用,而不是复制它们,以便将所有MinWindowWidth设置保存在一个地方。
https://stackoverflow.com/questions/46122212
复制相似问题