我需要在几个项目控件之间拖动项目,每个项目控件都绑定到它自己的集合 当我拖动一个项目时,我需要知道它最初是从哪个项目控件中拖出来的。
可拖动项目模板:
<DataTemplate>
<Ellipse MouseDown="Ellipse_MouseDown" ></Ellipse>
</DataTemplate>
itemscontrols:
<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事件上的项目时,我可以引用被拖动的项目,但我也需要 引用它被拖出的itemscontrol:如何做到这一点?
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)
}
答案 0 :(得分:1)
我会向VisualTree向上导航,直到找到一个ItemsControl
对象,这将是父对象。
我在我的博客上发布了一些VisualTree helpers来执行此操作,我可以像这样使用它们来查找父ItemsControl
:
private void Ellipse_MouseDown(object sender, MouseButtonEventArgs e)
{
Ellipse ellipse = (Ellipse)sender;
Checker checker = (Checker)ellipse.DataContext;
ItemsControl parent = VisualTreeHelpers.FindAncestor<ItemsControl>(ellipse);
}