получить ссылку на itemcontrol - PullRequest
0 голосов
/ 08 марта 2012

Мне нужно перетаскивать элементы между несколькими элементами управления элементами, каждый из которых привязан к своей собственной коллекции, когда я перетаскиваю элемент, мне нужно знать, из какого элемента управления он был изначально перетащен.

шаблон перетаскиваемого элемента:

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

1 Ответ

1 голос
/ 08 марта 2012

Я буду перемещаться по 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); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...