У меня есть приложение UWP, в котором я использую CustomMediaTransportControls.
внутри этих элементов управления я добавил несколько дополнительных кнопок на панели команд Основные команды и установил IsDynamicOverflowEnabled=true в соответствии с документами, он должен автоматически отправлять основные команды в меню переполнения, когда размер экрана недостаточен для всех кнопок. и он должен их удалить в соответствии со свойством MediaTransportControlsHelper.DropoutOrder на каждой кнопке appbarButton.
Проблема
Когда размер экрана меньше, элементы управления, кажется, переходят в меню переполнения, как и ожидалось, но я не могу получить к ним доступ или увидеть их, потому что кнопка Более никогда не отображается, что странно, потому что я пытался установить OverflowButtonVisibility=visible и даже пробовал его с Авто, но эта кнопка никогда не отображается в пользовательском интерфейсе. тот факт, что я знаю, что первичные команды будут переполнены, заключается в том, что я явно установил кнопку «Больше» как видимую изнутри шаблонный стиль панели команд, а затем я вижу ее в пользовательском интерфейсе, но это не идеально, потому что она отображается, даже когда она в переполнении ничего нет. поэтому я вернул его к значению привязки по умолчанию, как было раньше.
Также я использую повторно шаблонный стиль командной панели, потому что я хотел установить горизонтальное выравнивание основных командных кнопок как центр.
На этом первом изображении вы можете видеть, что отображаются все элементы управления.
но здесь, когда я изменил размер окна до меньшего размера, я вижу меньше элементов управления, но не кнопку меню переполнения (больше).
Также обратите внимание, что проект приложения имеет обновление создателей как минимальную цель, поэтому DynamicOverflow должен работать, потому что он был представлен в обновлении Anniversary.
Обновление 1
На картинке ниже вы можете видеть, что я добавил на страницу обычную панель команд, и на ней отображается кнопка «Еще», даже если нет кнопок переполнения. очевидно, это показано для этикеток, я думаю.
and here you can see that upon resizing, the more button does get the extra buttons in it.
Возникает вопрос, почему он не работает с панелью команд MediaTransportControls? Я даже попробовал элементы управления транспортом по умолчанию без какого-либо пользовательского стиля и просто включил все кнопки на нем с помощью is..buttonvisible, и я получил ту же ошибку и там. и на каком этапе предотвращается эта функция? и как я могу изменить поведение?
С помощью Live Property Explorer я могу подтвердить, что видимость дополнительной кнопки настроена на свернутую, и если я сделаю ее видимой прямо здесь, в обозревателе свойств, я вижу кнопку, теперь я не понимаю, почему она свернута? даже когда я устанавливаю видимость 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();
}
Как видите, в рамках события я динамически проверяю количество элементов в меню Seconddayoverflow и соответствующим образом контролирую видимость кнопки «Дополнительно». Очевидно, что это обходной путь, но если кто-то найдет правильную причину, по которой на панели команд MediaTransportControls есть эта ошибка, отправьте еще один ответ в этом сообщении.
Также обратите внимание, что методы FindDescendent поступают из пакета nuget расширения набора инструментов сообщества uwp.