好的,所以我有一个 UWP 应用,我正在使用 CustomMediaTransportControls 。 在这些控件中,我在命令栏 PrimaryCommands 中添加了一些额外的按钮,并根据它应该自动将主命令发送到溢出菜单的文档设置 IsDynamicOverflowEnabled = true 所有按钮的屏幕尺寸都不够。它应该在每个appbarButton上的 MediaTransportControlsHelper.DropoutOrder 属性中删除它们。
问题
当屏幕尺寸较小时,控件似乎按预期进入溢出菜单,但我无法访问或看到它们,因为更多按钮永远不可见,这很奇怪,因为我试图设置 OverflowButtonVisibility =可见,甚至尝试使用自动,但该按钮永远不会显示在用户界面上。我知道主要命令会溢出的事实是因为我在命令栏的模板样式中明确地将更多按钮设置为可见,然后我在UI中看到它,但它不是理想的,因为它甚至在溢出时没有任何东西时显示出来。所以我把它改回了以前的默认绑定值。
此外,我正在使用命令栏的重新模式,因为我想将主命令按钮的horizontalAlignment设置为中心。
为了让你更简单,我已经制作了一个样本仓库来重现这个问题,只需克隆仓库,运行应用程序并调整窗口大小以注意更多按钮永远不会出现。
https://github.com/touseefbsb/CommandBarOverflowBug
在第一张图片中,您可以看到所有控件都显示
但是当我将窗口调整为较小的尺寸时,我看到的控件较少但没有溢出菜单(更多)按钮。
另请注意,应用项目已将创建者更新为最低目标,因此DynamicOverflow应该可以正常工作,因为它是在周年纪念更新中引入的。
更新1
在下面的图片中,你可以看到我在页面上添加了一个正常的命令栏,即使没有溢出按钮,它也会显示更多按钮。很明显,我猜这些标签会显示出来。
在这里你可以看到,在调整大小时,更多的按钮会获得额外的按钮。
所以最后问题是为什么它不能与MediaTransportControls命令栏一起使用?我甚至尝试了默认的transportcontrols没有任何自定义样式,只是启用它上面的所有按钮is..buttonvisible,我也有相同的错误。这个功能被阻止在哪个阶段?以及如何覆盖行为?
使用Live属性资源管理器,我可以确认更多按钮的可见性设置为折叠,如果我在属性资源管理器中将其设置为可见,我可以看到按钮,现在我不明白为什么它会折叠?即使我设置overflowbuttonvisibility以我的xaml样式可见?
答案 0 :(得分:1)
在使用我的自定义控件进行大量游戏之后,我必须动态地覆盖行为并创建一些我自己的行为才能使其工作。
我在控件的已加载事件中跟踪了2个控件
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()方法中订阅了CommandBar的 DynamicOverflowItemsChanging 事件。
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命令栏有这个错误,请在这篇文章上发布另一个答案。感谢。
另请注意,FindDescendent方法来自 uwp社区工具包扩展 nuget包