Xaml VisualStateManager没有';使用嵌套网格控件时不更新网格属性
上下文:我想在某些情况下使用VisualStateManager将StackPanel移动到不同的网格列。Xaml VisualStateManager没有';使用嵌套网格控件时不更新网格属性,xaml,uwp,uwp-xaml,Xaml,Uwp,Uwp Xaml,上下文:我想在某些情况下使用VisualStateManager将StackPanel移动到不同的网格列。 问题:嵌套的网格控件似乎会阻止我的VisualState setter被应用。在下面的示例中(已从原始代码简化),如果OuterGrid被注释掉,VisualState setter将触发,但当OuterGrid存在时不会触发。 问题:使用嵌套网格时,如何触发VisualState setter 例如: <Grid x:Name="OuterGrid"> <Gri
问题:嵌套的网格控件似乎会阻止我的VisualState setter被应用。在下面的示例中(已从原始代码简化),如果OuterGrid被注释掉,VisualState setter将触发,但当OuterGrid存在时不会触发。
问题:使用嵌套网格时,如何触发VisualState setter 例如:
<Grid x:Name="OuterGrid">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="12"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel
Grid.Column="0"
>
<Button
x:Name="Button1"
HorizontalAlignment="Stretch"
Content="Button1"
/>
</StackPanel>
<StackPanel
x:Name="Button2"
Grid.Column="2"
>
<HyperlinkButton
Height="36"
HorizontalAlignment="Stretch"
>
<TextBlock
Text="Button2"
/>
</HyperlinkButton>
</StackPanel>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ButtonAlignments">
<VisualState>
<!-- Move Button2 to the left column -->
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="600" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="Button2.(Grid.Column)" Value="0" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Grid>
</Grid>
您需要在XAML树的根级别定义视觉状态 只需将您的
移动到OuterGrid
。我对您的示例做了一些更改-它使用的是可见性
,而不是网格。列
:
<Grid x:Name="OuterGrid">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ButtonAlignments">
<VisualState>
<!-- Move Button2 to the left column -->
<VisualState.Setters>
<!--<Setter Target="Button2.(Grid.Column)"
Value="0" />-->
<Setter Target="Button2.(UIElement.Visibility)"
Value="Visible" />
</VisualState.Setters>
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="600" />
</VisualState.StateTriggers>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="12" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<Button x:Name="Button1"
HorizontalAlignment="Stretch"
Content="Button1" />
</StackPanel>
<StackPanel x:Name="Button2"
Grid.Column="2"
Visibility="Collapsed">
<HyperlinkButton Height="36"
HorizontalAlignment="Stretch">
<TextBlock Text="Button2" />
</HyperlinkButton>
</StackPanel>
</Grid>
</Grid>
不确定更改样本的原因;通过更改Button2的Grid.Column值,它似乎可以正常工作。是的,确实如此。我只是喜欢简单明了地测试东西