从项获取项控制引用



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

可拖动项目模板:

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

最新更新