我有一个正在使用的 UWP 应用程序自定义媒体传输控件。
在这些控件中,我在命令栏中添加了一些额外的按钮主要命令并已设定IsDynamicOverflowEnabled=true
根据文档,当屏幕尺寸不足以容纳所有按钮时,它应该自动将主要命令发送到溢出菜单。它应该根据MediaTransportControlsHelper.DropoutOrder
每个 appbarButton 上的属性。
Problem
当屏幕尺寸较小时,控件似乎会按预期进入溢出菜单,但我无法访问或看到它们,因为More按钮永远不可见,这很奇怪,因为我尝试设置OverflowButtonVisibility=visible
甚至尝试过Auto但该按钮永远不会显示在用户界面上。事实上,我知道主要命令将会溢出,因为我明确地将更多按钮设置为可见,从模板化风格命令栏的,然后我在用户界面中看到它,但它并不理想,因为即使溢出中没有任何内容它也会显示。所以我把它改回以前的默认绑定值。
另外,我使用命令栏的重新模板化样式,因为我想将主命令按钮的水平对齐设置为中心。
在第一张图片中,您可以看到所有控件都显示出来
但在这里,当我将窗口大小调整为较小的尺寸时,我看到的控件较少,但没有溢出菜单(更多)按钮。
另请注意,应用程序项目将创建者更新作为最低目标,因此 DynamicOverflow 应该可以工作,因为它是在周年更新中引入的。
Update 1
在下图中,您可以看到我向页面添加了一个普通命令栏,即使没有溢出按钮,它也会显示更多按钮。显然,我猜它是为标签显示的。
在这里您可以看到,调整大小后,“更多”按钮确实会包含额外的按钮。
所以问题是,为什么它不能与 MediaTransportControls 命令栏一起使用?我什至尝试了没有任何自定义样式的默认传输控件,只是使用 is..buttonvisible 启用了其上的所有按钮,并且我也遇到了相同的错误。该功能在哪个阶段被阻止?我怎样才能覆盖这种行为?
使用实时属性浏览器,我可以确认“更多”按钮的可见性设置为折叠,如果我将其设置为在属性浏览器中可见,我可以看到该按钮,现在我不明白的是它为什么折叠?即使我将overflowbuttonvisibility设置为在我的xaml样式中可见?
在多次使用自定义控件之后,我必须动态地覆盖该行为并创建一些我自己的行为才能使这项工作正常进行。
我的系统中有以下 2 个控件Loaded
控制事件
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");
}
我订阅了DynamicOverflowItemsChanging
我的 CommandBar 的事件OnApplyTemplate()
我的自定义媒体传输控件的方法。
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();
}
正如您所看到的,在事件中,我动态检查 secondaryoverflow 菜单中的项目数量,并相应地控制“更多”按钮的可见性。这显然是一种解决方法,但如果有人找到 MediaTransportControls commandbar 有此错误的适当原因,请在这篇文章中发布另一个答案。
另请注意,FindDescentent 方法来自uWP 社区工具包扩展努吉特包。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)