当 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>
这个帖子与您的问题非常相似。
UserControl 不在其控件模板中显示其属性值。建议将“VisualStateManager.VisualStateGroups”放在 UserControl 的子元素中。