3

我有一个自定义 RibbonGallery 控件,例如 Excel、MSWord 和 Outlook。

在此处输入图像描述

请参考下面的 Excel RibbonGallery 图片,正常选择仍然存在。

在此处输入图像描述

并且我保留了两个ItemsSource,一个用于RibbonGallery View,一个用于Popup,并将项目安排在RibbonGallery和Popup View中。

当我在 RibbonGallery 中选择一个项目时,SelectedItem(对象)的选择将被更新。如果我打开一个弹出窗口,我从 RibbonGallery 中清除了 ItemsSource(为了避免元素已经添加了另一个元素问题的子元素)并将其重新分配给 Popup 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>

SelectedItemItemsControl Tapped事件中更新。

有人请告诉我在将新集合更新到控件时如何保留选择(RibbonGallery 到弹出窗口和弹出到 RibbonGallery)?

4

1 回答 1

1

ItemsControl 不能选择项目,只能显示集合。只有Selector或其后代之一可以选择项目。没有带有 ItemsControl 的 SelectedItem 的概念。

对于Selector,在清除 itemsource 后,SelectedItem 已经变为 null,例如 listView、DataGrid。所以在清空itemsource之前需要先保存之前的SelectedItem,然后将SelectedItem设置为之前的SelectedItem。

于 2021-02-19T07:34:38.547 回答