【问题标题】:VisualStateManager not setting attached properties Grid.Row and Grid.ColumnSpan in UWP applicationVisualStateManager 未在 UWP 应用程序中设置附加属性 Grid.Row 和 Grid.ColumnSpan
【发布时间】:2015-11-13 04:46:59
【问题描述】:

我正在尝试使用 Windows 10 通用应用程序项目中的 VisualStateManager 更改一些附加属性,但设置器无法正常工作。它没有设置我的 TopBarGrid 元素的附加属性。

如果您在下面查看,我使用括号表示法来更改 Grid.RowGrid.ColumnSpan 属性。但是当我运行应用程序时,当我扩大宽度时没有设置属性。我期待 Grid 移动到那个位置。

这是我的代码:

<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>

【问题讨论】:

  • 抱歉,因为我正在使用虚拟机,无法复制和粘贴代码。
  • 图片转码。

标签: xaml uwp win-universal-app winrt-xaml windows-10-mobile


【解决方案1】:

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

尝试从一种状态中删除一组。


您仍然看不到任何更改的原因很可能是因为您的Setters 在您的narrowState 中有问题。

尝试以下代码,注意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>

但只要我向narrowState 输入更多Setters(例如&lt;Setter Target="PaneHeader.Margin" Value="60,12,0,0" /&gt;),它就会停止工作。我知道,PaneHeader 甚至没有在我的测试页面中定义!但它也告诉我VSM 只是出于某种原因吞下了错误。

因此,请尝试删除您的 Setters 并将它们一对一添加以找到错误的。那么这将是一个简单的修复。

【讨论】:

  • 我尝试删除其中一个,但仍然无法正常工作。我什至将 VSM 移到了我的代码的顶部。不确定这是否在范围方面有任何作用..
  • 忘了说,你还想把你的 vsm 放在你的根面板下。
  • 就是这样。当我删除所有设置器并一一添加它们时,一切正常,直到其中一个使它们都不起作用。 VSM 不报告任何错误。为什么它会吞下错误?调试起来非常困难。
  • 不知道哈哈。它似乎能够报告一些错误,但由于某种原因不能报告所有错误。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多