从item获取itemscontrol引用

时间:2012-03-07 23:49:43

标签: wpf drag-and-drop

我需要在几个项目控件之间拖动项目,每个项目控件都绑定到它自己的集合 当我拖动一个项目时,我需要知道它最初是从哪个项目控件中拖出来的。

可拖动项目模板:

  <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)    
    }

1 个答案:

答案 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); 
}