在周年纪念更新中运行的应用程序在您选择更多(...)菜单之前不会显示CommandBar PrimaryCommands按钮

时间:2016-09-23 20:37:25

标签: uwp uwp-xaml

我编写的应用程序在Windows 10版本10586和10240中正常工作,但在构建14393(周年纪念更新)中没有。

在周年纪念更新版本中运行时,问题是我的命令栏的PrimaryCommands区域中的按钮没有出现。如果显示SecondaryCommands区域(通过选择命令栏右端的“ ... ”菜单),除了辅助命令外,还会神奇地显示PrimaryCommands中的按钮。然后,主要命令按钮在整个会话的剩余时间内保持可见状态。

但是这个问题只发生在构建14393中。在早期的Windows构建中,CommandBar按钮会立即显示,正如它们应该的那样。您不必显示辅助命令即可显示主命令。

请注意,我使用VisualStateManager(使用GoToState方法)为我的按钮设置不同的可见性状态。按钮会根据当前上下文显示或消失。

CommandBar组件位于主应用页面中。在同一页面中,我还有一个框架,我在其中加载各种页面,因为用户选择了各种导航选项。

当用户导航到另一个页面(来自Frame的Navigated事件)时,我调用GoToState方法,根据所选页面设置CommandButton可见性状态:

// Change the visual state of command buttons based on the page selection
string pageType = ContentFrame.CurrentSourcePageType.Name;
var stateFound = VisualStateManager.GoToState(this, pageType, false);

以下是我的视觉状态,在页面的XAML标记中定义:

<VisualStateManager.VisualStateGroups>
    <VisualStateGroup x:Name="SelectedPageStates">

        <VisualState x:Name="ProductsPage">
            <VisualState.Setters>
                <Setter Target="CommandDirections.Visibility" Value="Collapsed" />
                <Setter Target="CommandShare.Visibility" Value="Collapsed" />
                <Setter Target="CommandPrint.Visibility" Value="Collapsed" />
                <Setter Target="CommandSettings.Visibility" Value="Visible" />
            </VisualState.Setters>
        </VisualState>

        <VisualState x:Name="NewsPage">
            <VisualState.Setters>
                <Setter Target="CommandDirections.Visibility" Value="Collapsed" />
                <Setter Target="CommandShare.Visibility" Value="Collapsed" />
                <Setter Target="CommandPrint.Visibility" Value="Collapsed" />
                <Setter Target="CommandSettings.Visibility" Value="Visible" />
            </VisualState.Setters>
        </VisualState>

        <VisualState x:Name="MapsPage">
            <VisualState.Setters>
                <Setter Target="CommandDirections.Visibility" Value="Visible" />
                <Setter Target="CommandShare.Visibility" Value="Collapsed" />
                <Setter Target="CommandPrint.Visibility" Value="Collapsed" />
                <Setter Target="CommandSettings.Visibility" Value="Visible" />
            </VisualState.Setters>
        </VisualState>

        <VisualState x:Name="SalesPage">
            <VisualState.Setters>
                <Setter Target="CommandDirections.Visibility" Value="Collapsed" />
                <Setter Target="CommandShare.Visibility" Value="Collapsed" />
                <Setter Target="CommandPrint.Visibility" Value="Collapsed" />
                <Setter Target="CommandSettings.Visibility" Value="Visible" />
            </VisualState.Setters>
        </VisualState>

    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

正如我所说,代码在14393之前的Windows版本中运行良好。但在构建14393中,在用户显示更多(...)菜单之前,PrimaryCommands不可见。我想知道在构建14393中可能会有什么不同导致这种情况发生。

1 个答案:

答案 0 :(得分:1)

我自己遇到了问题。我认为在新的IsDynamicOverflowEnabled属性中存在一个问题,它有时会导致按钮无意中溢出到辅助命令下拉列表中。对于C ++,修复是禁用这样的新功能:

if (Windows::Foundation::Metadata::ApiInformation::IsPropertyPresent(L"Windows.UI.Xaml.Controls.CommandBar", L"IsDynamicOverflowEnabled"))
{
    this->CommandBar->IsDynamicOverflowEnabled = false;
}

CommandBar控件似乎有一个错误,用户代码折叠按钮完全打破了动态溢出逻辑。