Xaml 启用DynamicOverflow时未显示UWP命令栏“更多”按钮

Xaml 启用DynamicOverflow时未显示UWP命令栏“更多”按钮,xaml,uwp,custom-controls,uwp-xaml,commandbar,Xaml,Uwp,Custom Controls,Uwp Xaml,Commandbar,我有一个UWP应用程序,我正在其中使用CustomMediaTransportControls。 在这些控件中,我在commandbarPrimaryCommands中添加了一些额外的按钮,并根据文档设置了IsDynamicOverflowEnabled=true,当屏幕大小不足以容纳所有按钮时,它应该自动将主要命令发送到溢出菜单。它应该根据每个appbarButton上的MediaTransportControlsHelper.DropoutOrder属性将它们删除 问题 当屏幕尺寸变小时,控

我有一个UWP应用程序,我正在其中使用CustomMediaTransportControls。 在这些控件中,我在commandbarPrimaryCommands中添加了一些额外的按钮,并根据文档设置了
IsDynamicOverflowEnabled=true
,当屏幕大小不足以容纳所有按钮时,它应该自动将主要命令发送到溢出菜单。它应该根据每个appbarButton上的
MediaTransportControlsHelper.DropoutOrder
属性将它们删除

问题

当屏幕尺寸变小时,控件似乎会按预期进入溢出菜单,但我无法访问或查看它们,因为More按钮永远不可见,这很奇怪,因为我曾尝试设置
OverflowButtonVisibility=visible
,甚至用Auto尝试过,但该按钮从未出现在UI上。我知道主命令将溢出,这是因为我从commandbar的模板样式中显式地将more按钮设置为visible,然后我在UI中看到它,但这并不理想,因为即使溢出中没有任何内容,它也会显示出来。所以我把它改回了以前的默认绑定值

我还使用了命令栏的重新模板样式,因为我想将主命令按钮的水平对齐设置为中心

在第一张图像中,您可以看到所有控件都显示出来

但在这里,当我将窗口大小调整为较小尺寸时,我看到的控件较少,但没有溢出菜单(更多)按钮。

还请注意,应用程序项目将创建者更新作为最低目标,所以DynamicOverflow应该可以工作,因为它是在周年更新中引入的

更新1

在下面的图片中,你可以看到我在页面上添加了一个普通的命令栏,它显示了“更多”按钮,即使没有溢出按钮。很明显,我猜它是为标签显示的

在这里你可以看到,在调整大小时,更多的按钮会得到更多的按钮

所以问题是,为什么它不能与MediaTransportControls命令栏一起工作?我甚至在没有任何自定义样式的情况下尝试了默认的transportcontrols,只是用is..buttonvisible启用了它上面的所有按钮,我也遇到了同样的错误。这一特征在哪个阶段被阻止?我该如何克服这种行为


使用Live property explorer,我可以确认“更多”按钮的可见性设置为“折叠”,如果我在property explorer中将其设置为“可见”,我可以看到该按钮,现在我不明白的是,为什么它会折叠?即使我在xaml风格中将overflowbuttonvisibility设置为visible?

在大量使用自定义控件之后,我也必须动态重写行为并创建一点我自己的行为,以使其正常工作

在控件的
加载事件中,我得到了以下两个控件

private void FluentMtc_Loaded(object sender, RoutedEventArgs e)
{
    //secondaryItemControl to check how many items are in overflow menu
    _secondarycontrols = (CommandBarOverflowPresenter)(((Popup)this.FindDescendantByName("OverflowPopup")).Child).FindDescendantByName("SecondaryItemsControl");
    //to toggle visibility of more button
    _moreButton = (Button)this.FindDescendantByName("MoreButton");
}
我在自定义媒体传输控件的
OnApplyTemplate()
方法中订阅了命令栏的
dynamicoverflowitemschaging
事件

    protected override void OnApplyTemplate()
    {

        var barr = (CommandBar)GetTemplateChild("MediaControlsCommandBar");

        //the event to control the dynamicoverflow automatically.
        barr.DynamicOverflowItemsChanging += (s, e) =>
        {
            if (_secondarycontrols.Items.Count == 0 && e.Action == CommandBarDynamicOverflowAction.AddingToOverflow)
                _moreButton.Visibility = Visibility.Visible;
            else if (_secondarycontrols.Items.Count == 1 && e.Action == CommandBarDynamicOverflowAction.RemovingFromOverflow)
                _moreButton.Visibility = Visibility.Collapsed;
        };

        //base implementation
        base.OnApplyTemplate();
    }
正如您所见,在事件中,我动态检查secondayoverflow菜单中的项目数,并相应地控制“更多”按钮的可见性。这显然是一个解决办法,但如果有人找到了MediaTransportControls commandbar出现此错误的适当原因,请在这篇文章中发布另一个答案

还请注意FindDescentent方法来自uwp社区工具包扩展nuget包