Кнопка "Больше" на панели команд UWP не отображается с DynamicOverflowEnabled

У меня есть приложение UWP, в котором я использую CustomMediaTransportControls. внутри этих элементов управления я добавил несколько дополнительных кнопок на панели команд Основные команды и установил IsDynamicOverflowEnabled=true в соответствии с документами, он должен автоматически отправлять основные команды в меню переполнения, когда размер экрана недостаточен для всех кнопок. и он должен их удалить в соответствии со свойством MediaTransportControlsHelper.DropoutOrder на каждой кнопке appbarButton.

Проблема

Когда размер экрана меньше, элементы управления, кажется, переходят в меню переполнения, как и ожидалось, но я не могу получить к ним доступ или увидеть их, потому что кнопка Более никогда не отображается, что странно, потому что я пытался установить OverflowButtonVisibility=visible и даже пробовал его с Авто, но эта кнопка никогда не отображается в пользовательском интерфейсе. тот факт, что я знаю, что первичные команды будут переполнены, заключается в том, что я явно установил кнопку «Больше» как видимую изнутри шаблонный стиль панели команд, а затем я вижу ее в пользовательском интерфейсе, но это не идеально, потому что она отображается, даже когда она в переполнении ничего нет. поэтому я вернул его к значению привязки по умолчанию, как было раньше.

Также я использую повторно шаблонный стиль командной панели, потому что я хотел установить горизонтальное выравнивание основных командных кнопок как центр.

На этом первом изображении вы можете видеть, что отображаются все элементы управления.

Кнопка "Больше" на панели команд UWP не отображается с DynamicOverflowEnabled

но здесь, когда я изменил размер окна до меньшего размера, я вижу меньше элементов управления, но не кнопку меню переполнения (больше).

Кнопка "Больше" на панели команд UWP не отображается с DynamicOverflowEnabled

Также обратите внимание, что проект приложения имеет обновление создателей как минимальную цель, поэтому DynamicOverflow должен работать, потому что он был представлен в обновлении Anniversary.

Обновление 1

На картинке ниже вы можете видеть, что я добавил на страницу обычную панель команд, и на ней отображается кнопка «Еще», даже если нет кнопок переполнения. очевидно, это показано для этикеток, я думаю.

Кнопка "Больше" на панели команд UWP не отображается с DynamicOverflowEnabled

and here you can see that upon resizing, the more button does get the extra buttons in it.

Кнопка "Больше" на панели команд UWP не отображается с DynamicOverflowEnabled

Возникает вопрос, почему он не работает с панелью команд MediaTransportControls? Я даже попробовал элементы управления транспортом по умолчанию без какого-либо пользовательского стиля и просто включил все кнопки на нем с помощью is..buttonvisible, и я получил ту же ошибку и там. и на каком этапе предотвращается эта функция? и как я могу изменить поведение?

С помощью Live Property Explorer я могу подтвердить, что видимость дополнительной кнопки настроена на свернутую, и если я сделаю ее видимой прямо здесь, в обозревателе свойств, я вижу кнопку, теперь я не понимаю, почему она свернута? даже когда я устанавливаю видимость overflowbuttonvisibility в моем стиле xaml?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
309
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После долгой игры с моим настраиваемым элементом управления мне пришлось динамически переопределить поведение и создать немного своего собственного поведения, чтобы заставить эту работу работать.

Я получил следующие 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();
    }

Как видите, в рамках события я динамически проверяю количество элементов в меню Seconddayoverflow и соответствующим образом контролирую видимость кнопки «Дополнительно». Очевидно, что это обходной путь, но если кто-то найдет правильную причину, по которой на панели команд MediaTransportControls есть эта ошибка, отправьте еще один ответ в этом сообщении.

Также обратите внимание, что методы FindDescendent поступают из пакета nuget расширения набора инструментов сообщества uwp.

Другие вопросы по теме