UWP 命令栏更多按钮未显示 DynamicOverflowEnabled

2023-12-07

我有一个正在使用的 UWP 应用程序自定义媒体传输控件。 在这些控件中,我在命令栏中添加了一些额外的按钮主要命令并已设定IsDynamicOverflowEnabled=true根据文档,当屏幕尺寸不足以容纳所有按钮时,它应该自动将主要命令发送到溢出菜单。它应该根据MediaTransportControlsHelper.DropoutOrder每个 appbarButton 上的属性。

Problem

当屏幕尺寸较小时,控件似乎会按预期进入溢出菜单,但我无法访问或看到它们,因为More按钮永远不可见,这很奇怪,因为我尝试设置OverflowButtonVisibility=visible甚至尝试过Auto但该按钮永远不会显示在用户界面上。事实上,我知道主要命令将会溢出,因为我明确地将更多按钮设置为可见,从模板化风格命令栏的,然后我在用户界面中看到它,但它并不理想,因为即使溢出中没有任何内容它也会显示。所以我把它改回以前的默认绑定值。

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

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

full window size

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

smaller size window

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

Update 1

在下图中,您可以看到我向页面添加了一个普通命令栏,即使没有溢出按钮,它也会显示更多按钮。显然,我猜它是为标签显示的。

normal commandbar added

在这里您可以看到,调整大小后,“更多”按钮确实会包含额外的按钮。

more button works here

所以问题是,为什么它不能与 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(使用前将#替换为@)

UWP 命令栏更多按钮未显示 DynamicOverflowEnabled 的相关文章

随机推荐

  • Linux 上 JavaFX 无法解释的内存泄漏

    我的 Java 程序仅在 Linux 上运行时发生内存泄漏 症状 VisualVM 显示堆大小约为 300Mb 顶部 并且没有可疑活动 在 Mac OS X 上 程序使用 900Mb 内存无限期运行 通过活动监视器 在 Linux 上 当操
  • 更有效地初始化数组保存结构

    我有以下代码 const N usize 10000 const S usize 7000 derive Copy Clone Debug struct T a f64 b f64 f f64 fn main let mut t T N T
  • Java中如何获取当前服务器时间?

    如何在Java中获取当前服务器的时间 我试过System currentTimeMills 但它返回的是客户端时间而不是服务器时间 我想获得 服务器 的时间 以毫秒为单位 我在网上搜索过 但没有得到 所有代码返回值来自1970 我想要的是例
  • 如何通过 vanilla js 更新范围输入滑块的位置?

    我正在尝试以编程方式更新输入滑块的位置 type range 但是 我设置的值不会更新滑块的位置 我也尝试过使用 element dispatchEvent new Event input 强制输入更改 该事件确实会触发 但是滑块不会在视觉
  • TensorFlow 操作的共享名称

    许多 TensorFlow 操作都有shared name作为可选参数 例如make initializable iterator 相关问题 大多数 全部 TF 资源 变量 TensorArray ConditionalAccumulato
  • 错误:预期的不合格 ID 错误:含义和修复? [复制]

    这个问题在这里已经有答案了 我刚刚学习 C 刚从 python3 和 QBASIC 出来 并且很难阅读编译器错误并理解它们 这使得调试变得困难 我遇到的问题是我不断拉出编译错误 错误 预期的不合格 ID 这发生在第 10 行和第 18 行
  • 如何将对象值转换为类型值?

    我有这样的类型 public class TypeValue public Type Type get private set public object Value get private set 所以我可以做类似的事情 TypeValu
  • 如何在 > 4 GiB 的地址范围内进行 malloc

    我正在尝试在 X86 64 Linux 上做一些测试 我想知道如何 让 malloc 在高于 4 GiB 的范围内分配返回地址 我是否必须使用单独 自定义库覆盖 malloc 或者还有其他简单的方法可以做到这一点吗 Thanks 编辑 我感
  • jQuery Draggable - 如果它对一个元素应用两次会发生什么?

    直到最近我才进行了这样的设置 它被多次调用 rsh draggable destroy draggable blah blah details The destroy是为了阻止多个可拖动处理程序在类上累积 AJAX 正在创建新元素 并且初始
  • NSScrollView 调整大小时向下滚动?

    我有一个 NSScrollView 里面有一个自定义视图 当我调整 NSScrollView 的大小时 高度会增加并且向上滚动 除非有更简单的方法 否则我可能必须注册一个通知以查看视图大小是否发生变化 然后将scrollPoint 调整到新
  • 如何将切换开关与 django 布尔字段一起使用?

    我有一个 work experience 模型 其中包含 is working 字段 当用户仍在公司工作时 该字段是正确的 在前端 我使用切换开关 我想在单击时更改布尔字段值 is working 在django中使用toggle的逻辑应该
  • Firestore:如何从数组映射中查询数据

    这是测试数据库的架构 我想编写一个查询 可以获取联系人在任何数组索引中 id 1 的所有文档 我检查过array containsFirestore 的运算符 但我的数组有一个地图 然后有字段 id 您当前无法构建在数组中查找对象字段的查询
  • 责任链模式是否只是一种矫枉过正?处理程序列表可以完成相同的任务

    在 责任链 COR 模式中 我们创建一个处理程序链 将请求传递给链中的第一个 它试图处理它 如果不能 它将请求转发到链中的下一个 依此类推 例如 Handler1 new ConcreteHandler1 handler1 handle p
  • 将值分配给向量中的行

    我有一个相对简单的问题 我和我的同事都无法弄清楚 我有一个值向量 我想将其粘贴到其中all我的数据集中的行在特定列范围内 如果我逐行分配值 则以下代码有效 data 1 1 10 lt myvector data 2 1 10 lt myv
  • 如何在一张背景图像上移动玩家?

    抱歉最近问了这么多问题 我刚刚开始接触 pygame 对于我之前的问题 我认为我没有正确地表达我想要做的事情 这是我尝试演示的一张快速图片 这是我希望玩家在其上移动的单个背景图像或地图 红色 X 只是角色的起点 我尝试做到这一点 以便当我移
  • 将缺失的日期添加到数组中

    我有以下数组 Array 2010 10 30 gt 1 2010 11 11 gt 1 2010 11 13 gt 11 我试图用第一个元素和最后一个元素之间所有缺失的日期填充数组 我尝试使用以下内容但无济于事 foreach users
  • Django/Postgres:RangeField 上的聚合

    是否可以执行聚合函数Django s RangeField 假设我们有 3 个对象BigIntegerField price range 第一个对象 price range 10 5000 第二个目标 price range 1 5000
  • 混合 TensorFlow 和 TensorFlow 联合代码的推荐方法是什么?

    TensorFlow TF 和 TensorFlow Federated TFF 是不同的功能层 旨在很好地协同工作 顾名思义 尽管如此 它们还是不同的东西 旨在解决不同的问题 我想知道以一种可以在普通 TF 和 TFF 工作负载中使用的方
  • 打开多个文件并对所有打开的文件执行宏

    我想编写一个宏来打开 30 个具有相同结构的 Excel 文件 宏应该对所有文件进行操作 并将每个文件的结果放入另一个 Excel 文件中 这意味着 所有结果 值 将被复制到目标文件中 如何编写VBA代码来打开多个文件 如何从每个文件中获取
  • UWP 命令栏更多按钮未显示 DynamicOverflowEnabled

    我有一个正在使用的 UWP 应用程序自定义媒体传输控件 在这些控件中 我在命令栏中添加了一些额外的按钮主要命令并已设定IsDynamicOverflowEnabled true根据文档 当屏幕尺寸不足以容纳所有按钮时 它应该自动将主要命令发