Xaml VisualStateManager没有';使用嵌套网格控件时不更新网格属性

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

上下文:我想在某些情况下使用VisualStateManager将StackPanel移动到不同的网格列。

问题:嵌套的网格控件似乎会阻止我的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值,它似乎可以正常工作。是的,确实如此。我只是喜欢简单明了地测试东西