VisualStates在UWP FlipView

时间:2017-09-08 18:01:40

标签: xaml uwp uwp-xaml

在我的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>

1 个答案:

答案 0 :(得分:0)

视觉状态在DataTemplate内不起作用,除非顶级容器是Control(请查看VisualStateManager.GoToState()中的第一个参数在引擎盖下)。在你的情况下,它是Grid所以它不起作用。

一个简单的解决方法是Grid包裹在UserControl内,或ContentControl包含空格式(请参阅我的其他答案{{3} })。

如果您已经在 Page 级别定义了这组视觉状态,并希望将相同的规则应用于页面中的某些DataTemplate。请查看此here我使用Behavior向下传递VisualStateGroup引用,而不是复制它们,以便将所有MinWindowWidth设置保存在一个位置。