1

我正在尝试向 Windows 8.1 中的 Xaml/VB 应用程序添加一些屏幕大小断点。我正在为我的主视图处理代码隐藏中的 SizeChanged 事件,并调用VisualStateManager.GoToState它应该传播到位于我的 .xaml 文件中的预定义视觉状态。这是一个小例子的全部代码,它应该改变小屏幕上的背景颜色,但没有。

MainView.xaml

<Page x:Name="PageRoot"
    x:Class="WinStoreMvvmTemplate.MainView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Grid Background="Red" x:Name="ContentGrid"></Grid>

    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup>
            <VisualState x:Name="SmallLayout">
                <Storyboard>
                    <ObjectAnimationUsingKeyFrames 
                        Storyboard.TargetName="ContentGrid"
                        Storyboard.TargetProperty="Background">
                        <DiscreteObjectKeyFrame KeyTime="0" Value="Blue"/>
                    </ObjectAnimationUsingKeyFrames>
                </Storyboard>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
</Page>

MainView.xaml.vb

Public NotInheritable Class MainView : Inherits Page

    Private Sub WindowSizeChanged(sender As Object, e As SizeChangedEventArgs) _
            Handles Me.SizeChanged
        If e.NewSize.Width < 340 Then
            VisualStateManager.GoToState(Me, "SmallLayout", True)
        End If
    End Sub

End Class

该事件肯定会在代码端触发,并且GoToState肯定会调用该方法。

知道为什么 xaml 没有接受这些更改吗?

4

1 回答 1

4

好吧,这很愚蠢,但看起来VisualStateManager.VisualStateGroups需要在 Page 的子元素内部,在这种情况下是Grid. 我会接受任何其他可以解释原因的答案。

MainView.xaml.vb

<Page x:Name="PageRoot"
    x:Class="WinStoreMvvmTemplate.View.MainView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Grid Background="Red" x:Name="ContentGrid">

        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup>
                <VisualState x:Name="RegularLayout"/>
                <VisualState x:Name="SmallLayout">
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames 
                            Storyboard.TargetName="ContentGrid"
                            Storyboard.TargetProperty="Background">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="Blue"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>

    </Grid>
</Page>
于 2013-11-11T22:10:24.540 回答