可视化状态自适应触发器未触发。

6
我看了BUILD大会的“从小屏幕到大屏幕:使用XAML构建通用Windows应用程序体验”这个会话。链接为:http://channel9.msdn.com/Events/Build/2015/2-679 我想尝试AdaptiveTrigger,但是在我的最小化Windows 10 UWP应用程序中,它没有触发。
<VisualStateManager.VisualStateGroups>
    <VisualStateGroup x:Name="WindowSizeStates">
        <VisualState x:Name="WideState">
            <VisualState.StateTriggers>
                <AdaptiveTrigger MinWindowWidth="800"/>
            </VisualState.StateTriggers>
            <VisualState.Setters>
                <Setter Target="rect.Fill" Value="Beige" />
            </VisualState.Setters>
        </VisualState>
        <VisualState x:Name="NarrowState">
            <VisualState.StateTriggers>
                <AdaptiveTrigger MinWindowWidth="0" />
            </VisualState.StateTriggers>
            <VisualState.Setters>
                <Setter Target="rect.Fill" Value="White" />
            </VisualState.Setters>
        </VisualState>
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <RelativePanel>
        <Rectangle x:Name="rect" Width="100" Height="100" RelativePanel.AlignTopWithPanel="True" Fill="Beige"/>
    </RelativePanel>
</Grid>

但是什么也没有发生。似乎触发器根本没有被触发。我错过了什么吗?

谢谢!

1个回答

18

当你把组放在页面中而不是第一个控件内时,就会出现这种情况。尝试将其放入内部:

是的,当您将组放入页面中而不是第一个控件内时,会发生这种情况。请尝试将其放在内部:

<Grid...>
   <VisualStateManager.VisualStateGroups>

</Grid>

如果您想要创建更复杂的自适应触发器,我在这里写了一篇文章:codeproject高级视图状态


谢谢,它运行正常 :) 我尝试将VisualStateManager放置在RelativePanel之前,但仍然不起作用。 - SeBo
3
我注意到在最近的VS2017的三个版本中,我的AdaptiveTriggers在调试期间没有正确工作,但是只有在调试期间如此。如果我使用VS启动应用程序,它们不起作用,如果我通过从磁贴中点击应用程序正常启动它们则能正常工作 :( 我使用的是VS2017 15.5.4。还有其他人遇到这种情况吗? - Michael Puckett II
1
@MichaelPuckettII 我也遇到了这个问题。最后我发现问题出在Visual States中针对延迟加载元素(x:Load)的定位上。似乎存在一个bug,如果你在Visual Studio中进行调试,并且你的VisualState通过AdaptiveTrigger更改尚未加载的元素(由于x:Load),则AdaptiveTriggers将无法工作。但是当在调试外运行相同的应用程序构建时,它们可以正常工作。希望这有所帮助。 - stenobot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接