我需要在几个项控件之间拖动项,每个项控件都绑定到自己的集合当我拖动一个项目时,我需要知道它最初是从哪个项目控件拖动的。
可拖动项目模板:
<DataTemplate>
<Ellipse MouseDown="Ellipse_MouseDown" ></Ellipse>
</DataTemplate>
控制的项目:
<ItemsControl Name="Pipe23" ItemsSource="{Binding Path=Pipes[23].Checkers}" ItemTemplate="{StaticResource PipeDataItem}"/>
<ItemsControl Name="Pipe22" ItemsSource="{Binding Path=Pipes[22].Checkers}" ItemTemplate="{StaticResource PipeDataItem}"/>
<ItemsControl Name="Pipe21" ItemsSource="{Binding Path=Pipes[21].Checkers}" ItemTemplate="{StaticResource PipeDataItem}"/>
<ItemsControl Name="Pipe20" ItemsSource="{Binding Path=Pipes[20].Checkers}" ItemTemplate="{StaticResource PipeDataItem}"/>
当在MouseDown事件上拖动项目时,我可以引用正在拖动的项目,但我也需要引用它被拖动的项目控件:如何做到这一点?
private void Ellipse_MouseDown(object sender, MouseButtonEventArgs e)
{
Ellipse ellipse = (Ellipse)sender;
Checker checker = (Checker)ellipse.DataContext;
// how do i reference the itemsconrtol containing the current ellipse (item)
}
我会在VisualTree中向上导航,直到找到一个ItemsControl
对象,它将是父对象。
我在博客上发布了一些VisualTree助手,我可以像这样使用它们来查找父ItemsControl
:
private void Ellipse_MouseDown(object sender, MouseButtonEventArgs e)
{
Ellipse ellipse = (Ellipse)sender;
Checker checker = (Checker)ellipse.DataContext;
ItemsControl parent = VisualTreeHelpers.FindAncestor<ItemsControl>(ellipse);
}