3

Excel、MSWord、Outlook のようなカスタムの RibbonGallery コントロールがあります。

ここに画像の説明を入力

以下の Excel RibbonGallery 画像を参照してください。通常の選択はまだ存在します。

ここに画像の説明を入力

そして、RibbonGallery View 用と Popup 用の 2 つの ItemsSource を保持し、RibbonGallery と Popup View にアイテムを配置しました。

RibbonGallery でアイテムを選択すると、SelectedItem (オブジェクト) の選択が更新されます。ポップアップを開くと、RibbonGallery から ItemsSource をクリアし (Element が別の要素の問題の子を既に追加していることを避けるため)、それを 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>

ItemsControl Tappedイベントから更新されたSelectedItem 。

新しいコレクションをコントロールに更新するときに選択を保持する方法を教えてください(RibbonGalleryからポップアップへ、RibbonGalleryへのポップアップ)。

4

1 に答える 1

1

ItemsControl はアイテムを選択できず、コレクションのみを表示します。Selectorまたはその子孫の 1 つだけが項目を選択できます。ItemsControl には SelectedItem という概念はありません。

Selectorの場合、listView、DataGrid などの itemsource をクリアした後、 SelectedItem はすでに null になります。そのため、itemsource をクリアする前に前の SelectedItem を保存してから、SelectedItem を前の SelectedItem に設定する必要があります。

于 2021-02-19T07:34:38.547 に答える