Xaml VisualStateManager未在UWP应用程序中设置附加属性Grid.Row和Grid.ColumnSpan

Xaml VisualStateManager未在UWP应用程序中设置附加属性Grid.Row和Grid.ColumnSpan,xaml,uwp,win-universal-app,winrt-xaml,windows-10-mobile,Xaml,Uwp,Win Universal App,Winrt Xaml,Windows 10 Mobile,我试图在Windows 10通用应用程序项目中使用VisualStateManager更改一些附加属性,但设置程序不起作用。它没有设置TopBarGrid元素的附加属性 如果您看下面,我使用括号表示法来更改Grid.Row和Grid.ColumnSpan属性。但是当我运行应用程序时,当我放大宽度时,属性没有被设置。我希望网格移动到那个位置 这是我的密码: <Grid> <VisualStateManager.VisualStateGroups> &

我试图在Windows 10通用应用程序项目中使用VisualStateManager更改一些附加属性,但设置程序不起作用。它没有设置TopBarGrid元素的附加属性

如果您看下面,我使用括号表示法来更改
Grid.Row
Grid.ColumnSpan
属性。但是当我运行应用程序时,当我放大宽度时,属性没有被设置。我希望网格移动到那个位置

这是我的密码:

<Grid>
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup>
            <VisualState x:Name="wideState">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="641" />
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="splitView.DisplayMode" Value="Inline"/>
                    <Setter Target="splitView.IsPaneOpen" Value="True"/>
                    <Setter Target="togglePaneButton.Visibility" Value="Collapsed"/>
                    <Setter Target="appHeader.Margin" Value="0,0,0,0"/>
                    <Setter Target="PaneHeader.Margin" Value="6,12,0,0"/>
                    <Setter Target="TopBarGrid.(Grid.Column)" Value="0"/>
                    <Setter Target="TopBarGrid.(Grid.RowSpan)" Value="2"/>
                </VisualState.Setters>
            </VisualState>
            <VisualState x:Name="narrowState">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="0" />
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="splitView.DisplayMode" Value="Overlay"/>
                    <Setter Target="togglePaneButton.Visibility" Value="Visible"/>
                    <Setter Target="PaneHeader.Margin" Value="60,12,0,0"/>
                    <Setter Target="searchForInfoBox.Width" Value="270"/>
                </VisualState.Setters>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Grid.RowDefinitions>
        <RowDefinition x:Name="TopRowHeight" Height="80"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="60"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid x:Name="TopBarGrid" Grid.Row="0" Grid.ColumnSpan="2">
        <toolbars:TopHorizontalToolBar/>
    </Grid>
    <Grid x:Name="LeftBarGrid" Grid.Column="0" Grid.RowSpan="2" Visibility="Collapsed">
        <toolbars:VerticalToolBar />
    </Grid>

您的代码看起来不错,但是,在这两种状态下,您都将
TopBarGrid
行和
列span
设置为相同的值。这就是为什么你看不到任何变化

尝试从一个状态删除一个集合


您仍然看不到任何更改的原因很可能是因为您的
狭义状态中的
Setter
有问题

请尝试以下代码,注意
TopBarGrid
的行为正确

<Grid x:Name="LayoutRoot">
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup>
            <VisualState x:Name="wideState">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="641" />
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="TopBarGrid.(Grid.Column)" Value="0" />
                    <Setter Target="TopBarGrid.(Grid.RowSpan)" Value="2" />
                </VisualState.Setters>
            </VisualState>
            <VisualState x:Name="narrowState">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="0" />
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="TopBarGrid.Background" Value="Green" />
                </VisualState.Setters>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition x:Name="TopRowHeight" Height="80" />
            <RowDefinition Height="*" />
            <RowDefinition Height="60" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Grid x:Name="TopBarGrid" Grid.Row="0" Grid.ColumnSpan="2" Background="Red" />
            <Grid x:Name="LeftBarGrid" Grid.Column="0" Grid.RowSpan="2" Visibility="Collapsed" />
    </Grid>
</Grid>

但是,一旦我将更多的
Setter
s(例如
)添加到
窄状态
,它就会停止工作。我知道,
PaneHeader
甚至没有在我的测试页面中定义!但它也告诉我,由于某种原因,
VSM
只是简单地接受了错误


因此,请尝试删除您的
Setter
s,并将它们一一添加,以找到有缺陷的一个。然后这将是一个简单的修复。

您的代码看起来不错,但是,在这两种状态下,您都将
TopBarGrid
行和
列span
设置为相同的值。这就是为什么你看不到任何变化

尝试从一个状态删除一个集合


您仍然看不到任何更改的原因很可能是因为您的
狭义状态中的
Setter
有问题

请尝试以下代码,注意
TopBarGrid
的行为正确

<Grid x:Name="LayoutRoot">
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup>
            <VisualState x:Name="wideState">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="641" />
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="TopBarGrid.(Grid.Column)" Value="0" />
                    <Setter Target="TopBarGrid.(Grid.RowSpan)" Value="2" />
                </VisualState.Setters>
            </VisualState>
            <VisualState x:Name="narrowState">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="0" />
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="TopBarGrid.Background" Value="Green" />
                </VisualState.Setters>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition x:Name="TopRowHeight" Height="80" />
            <RowDefinition Height="*" />
            <RowDefinition Height="60" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Grid x:Name="TopBarGrid" Grid.Row="0" Grid.ColumnSpan="2" Background="Red" />
            <Grid x:Name="LeftBarGrid" Grid.Column="0" Grid.RowSpan="2" Visibility="Collapsed" />
    </Grid>
</Grid>

但是,一旦我将更多的
Setter
s(例如
)添加到
窄状态
,它就会停止工作。我知道,
PaneHeader
甚至没有在我的测试页面中定义!但它也告诉我,由于某种原因,
VSM
只是简单地接受了错误


因此,请尝试删除您的
Setter
s,并将它们一一添加,以找到有缺陷的一个。那么这将是一个简单的修复。

@Ray对于TopBarGrid.(Grid.Column)您必须提供PaneHeader.(FrameworkElement.Margin)@Ray对于TopBarGrid.(Grid.Column)您必须提供PaneHeader.(FrameworkElement.Margin)

很抱歉,这是因为我在虚拟机上工作,无法复制和粘贴代码。已将图像转换为代码。很抱歉,这是因为我在虚拟机上工作,无法复制和粘贴代码。已将图像转换为代码。我尝试删除其中一个,但仍然无法工作。我甚至将VSM移到了代码的顶部。不确定这是否在范围方面起作用。忘了提一下,您还希望将vsm放在根面板下。就是这样。当我把所有的二传手移走,一个接一个地加上时,一切都进行得很顺利,直到其中一个二传手一个也不起作用。VSM不报告任何错误。为什么它会接受错误?调试起来非常困难。不知道lol。它似乎能够报告一些错误,但由于某些原因不能报告所有错误。我尝试删除其中一个错误,但仍然不起作用。我甚至将VSM移到了代码的顶部。不确定这是否在范围方面起作用。忘了提一下,您还希望将vsm放在根面板下。就是这样。当我把所有的二传手移走,一个接一个地加上时,一切都进行得很顺利,直到其中一个二传手一个也不起作用。VSM不报告任何错误。为什么它会接受错误?调试起来非常困难。不知道lol。它似乎能够报告一些错误,但由于某种原因不能报告所有错误。