获取ItemsPanel中的SelectedItem



我有一个列表框自定义stackpanel(只是一个类扩展了一个stackpanel现在,但我希望在这里做一些动画)作为它的itemspanel。现在,当选择改变时,我想在最后选择的项目和当前选择的项目之间做一些漂亮的动画。

现在我的问题是如何在项目面板中获得选中的项目?

这是我如何定义我的itemspanel

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

我在我的自定义stackpanel中创建了一个dependencyproperty叫做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。但这种方法根本行不通。

另一个想法是在stackpanel上覆盖previewmousedown,并从stackpanel的Children中找到相应的项。但是我还是不确定如何找到这个项目。

在绑定中使用RelativeSource

<ItemsPanelTemplate>
     <l:CustomStackPanel SelectedItem="{Binding SelectedItem,RelativeSource={RelativeSource FindAncestor, AncestorType=x:Type ListBox}}"  IsItemsHost="True" Orientation="Vertical"/>
 </ItemsPanelTemplate>

相关内容

  • 没有找到相关文章

最新更新