2

itempanel としてカスタム スタック パネル (スタック パネルを拡張したクラスですが、ここでアニメーションを実行したいと考えています) を持つリスト ボックスがあります。選択が変更されたら、最後に選択したアイテムと現在選択しているアイテムの間に素敵なアニメーションを作成することを考えました。

今私の問題は、アイテムパネルで選択したアイテムをどのように取得するのですか?

これは、アイテムパネルを定義する方法です

<ItemsPanelTemplate>
                    <l:CustomStackPanel SelectedItem="{Binding SelectedItem,ElementName=listbox}"  IsItemsHost="True" Orientation="Vertical"/>
                </ItemsPanelTemplate>

SelectedItem というカスタム スタックパネルに依存関係プロパティを作成しました

public UIElement SelectedItem
        {
            get { return (UIElement)GetValue(SelectedItemProperty); }
            set { SetValue(SelectedItemProperty, value); }
        }

        // Using a DependencyProperty as the backing store for SelectedItem.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty SelectedItemProperty =
            DependencyProperty.Register("SelectedItem", typeof(UIElement), typeof(CustomStackPanel), new PropertyMetadata(null,selectionChanged));

そして、リストボックスのselectedItemをstackpanelのselecteditemに単純にバインドできると思いました。しかし、このアプローチは単に機能していません。

もう 1 つの考えは、stackpanel の previewmousedown をオーバーライドし、stackpanel のChildrenから対応する項目を見つけることでした。しかし、再びアイテムを見つける方法がわかりません。

4

1 に答える 1

1

バインディングで RelativeSource を使用する

<ItemsPanelTemplate>
     <l:CustomStackPanel SelectedItem="{Binding SelectedItem,RelativeSource={RelativeSource FindAncestor, AncestorType=x:Type ListBox}}"  IsItemsHost="True" Orientation="Vertical"/>
 </ItemsPanelTemplate>
于 2014-06-26T09:35:44.430 に答える