#uwp #winui #winui-3
#uwp #winui #winui-3
Вопрос:
У меня есть пользовательский элемент управления RibbonGallery, как в Excel, MSWord и Outlook.
Пожалуйста, обратитесь к изображению Excel RibbonGallery ниже, и обычный выбор все еще существует.
И я сохранил два ItemsSource, один для представления RibbonGallery и один для Popup, и расположил элементы в RibbonGallery и Popup View.
Когда я выбираю элемент в RibbonGallery, выбор выбранного элемента (объекта) будет обновлен. Если я открываю всплывающее окно, я удаляю ItemsSource из RibbonGallery (чтобы избежать того, что элемент уже добавил дочерний элемент другого элемента) и переназначил его во всплывающее окно ItemsControl. Но выбор выбранного элемента очищается после открытия / закрытия всплывающего окна.
private void UpdateItemsSource()
{
if (!this.IsDropDownOpen)
{
this.popupGalleryItemsControl.ItemsSource = null;
this.ribbonGalleryItemsControl.ItemsSource = this.ItemsSource;
}
else
{
this.ribbonGalleryItemsControl.ItemsSource = null;
this.popupGalleryItemsControl.ItemsSource = this.ItemsSource;
}
}
<ItemsControl x:Name="RibbonGalleryItemsControl"
ItemContainerStyle="{TemplateBinding ItemContainerStyle}"
ItemTemplate="{TemplateBinding ItemTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
<ItemsControl x:Name="PopupItemsControl"
ItemContainerStyle="{TemplateBinding ItemContainerStyle}"
ItemTemplate="{TemplateBinding ItemTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
Выбранный элемент обновляется из события, вызванного ItemsControl .
Кто-нибудь, пожалуйста, скажите мне, как сохранить выделение при обновлении новой коллекции до элемента управления (RibbonGallery до popup и popup до RibbonGallery)?
Ответ №1:
ItemsControl не может выбирать элементы, только представлять коллекции. Только селектор или один из его потомков может выбирать элементы. Не существует понятия SelectedItem с ItemsControl .
Для Selector выбранный элемент становится нулевым уже после очистки itemsource, например ListView, DataGrid. Поэтому вам нужно сохранить предыдущий выбранный элемент, прежде чем очистить itemsource, затем установите для выбранного элемента значение предыдущий выбранный элемент.