如何在Grid中使用VisualStateManager.GoToState()

问题描述 投票:0回答:1

当 VSM 在

GoToState
内时如何使用
Grid

此代码适用于

AdaptiveTrigger
,但不适用于
GoToState
GoToState
要求您输入一个继承自
Control
的类,但如果您通过
MyUserControl
那么它什么也不做。进一步检查显示
MyUserControl
没有
VisualStateGroups
,这是有道理的,因为它们是在
Grid

中定义的
    <Page
    x:Class="VisualStateManagerTest.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:VisualStateManagerTest"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Page.Resources>
        <DataTemplate x:DataType="x:String" x:Key="MyTemplate">
            <UserControl x:Name="MyUserControl">
                <Grid x:Name="RootGrid">
                    <Border x:Name="MyBorder">
                        <TextBlock Text="{x:Bind}"/>
                    </Border>


                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup>
                            <VisualState x:Name="Wide">
                                <VisualState.StateTriggers>
                                    <AdaptiveTrigger MinWindowWidth="600"/>
                                </VisualState.StateTriggers>
                                <VisualState.Setters>
                                    <Setter Target="MyBorder.Background" Value="Red"/>
                                </VisualState.Setters>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                </Grid>
            </UserControl>
        </DataTemplate>
    </Page.Resources>
    
    <Grid>
        <ListView ItemTemplate="{StaticResource MyTemplate}">
            <ListView.Items>
                <x:String>test</x:String>
                <x:String>test1</x:String>
                <x:String>test2</x:String>
            </ListView.Items>
        </ListView>
    </Grid>
</Page>

如果您将 VSG 放入根

UserControl
,那么它们会显示为属于
UserControl
的组,但属性不会更新:

    <Page
    x:Class="VisualStateManagerTest.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:VisualStateManagerTest"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Page.Resources>
        <DataTemplate x:DataType="x:String" x:Key="MyTemplate">
            <UserControl x:Name="MyUserControl">
                <Grid x:Name="RootGrid">
                    <Border x:Name="MyBorder">
                        <TextBlock Text="{x:Bind}"/>
                    </Border>
                </Grid>

                <VisualStateManager.VisualStateGroups>
                    <VisualStateGroup>
                        <VisualState x:Name="Wide">
                            <VisualState.StateTriggers>
                                <AdaptiveTrigger MinWindowWidth="600"/>
                            </VisualState.StateTriggers>
                            <VisualState.Setters>
                                <Setter Target="MyBorder.Background" Value="Red"/>
                            </VisualState.Setters>
                        </VisualState>
                    </VisualStateGroup>
                </VisualStateManager.VisualStateGroups>
            </UserControl>
        </DataTemplate>
    </Page.Resources>
    
    <Grid>
        <ListView ItemTemplate="{StaticResource MyTemplate}">
            <ListView.Items>
                <x:String>test</x:String>
                <x:String>test1</x:String>
                <x:String>test2</x:String>
            </ListView.Items>
        </ListView>
    </Grid>
</Page>
uwp
1个回答
0
投票

这个帖子与您的问题非常相似。

UserControl 不在其控件模板中显示其属性值。建议将“VisualStateManager.VisualStateGroups”放在 UserControl 的子元素中。

© www.soinside.com 2019 - 2024. All rights reserved.