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

これはばかげていますが、 が Page の子要素 ​​(この場合は ) 内にある必要があるようです。その理由を説明できる他の答えを受け入れます。 VisualStateManager.VisualStateGroupsGrid

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 に答える