WPF - перетащите из DataTemplate - PullRequest
1 голос
/ 29 мая 2009

У меня есть ListBox, отображающий сотрудников с DataTemplate - он выглядит очень похожим на этот снимок экрана . Я хочу, чтобы можно было щелкнуть фотографию сотрудника, перетащить ее и оставить где-нибудь вне списка. Как я могу это сделать? Я не уверен, как захватить событие PreviewMouseLeftButtonDown изображения, так как оно находится внутри DataTemplate.

Редактировать: шаблон данных находится в отдельной сборке, и логика перетаскивания должна находиться в окне, содержащем ListBox.

Edit2: я думаю, что правильный способ сделать это с помощью команд, я прав?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 29 мая 2009

Вы не упомянули, где находится шаблон данных. Я попытаюсь охватить 2 варианта, которые очень похожи.

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

<UserControl.Resources>
    <DataTemplate DataType="{x:Type local:Staff}">
      <StackPanel>
        <TextBlock Text="{Binding Path=Name}"/>
        <Image Name="staffImage" PreviewMouseLeftButtonDown="staffImage_PreviewMouseLeftButtonDown"/>
      </StackPanel>
    </DataTemplate>
</UserControl.Resources>

Затем в UserControl.cs

private void staffImage_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{

}

Теперь, если вы используете шаблон даты в словаре ресурсов, вы можете сделать то же самое, но вам нужно создать код для файла для словаря ресурсов. Смотрите здесь .

Само по себе перетаскивание ... См. Сообщение Джейми Родригеса здесь .

Надеюсь, это поможет.

1 голос
/ 16 января 2011

Вы можете просто добавить ElementDragBehavior (что-то подобное) в шаблон данных.

Другой вариант (я не уверен, что он существует в WPF, но в Silverlight) в наборе инструментов Silverlight вы можете добавить это над списком:

<toolkit:ListBoxDragDropTarget AllowDrop="True">

это делает каждый элемент в списке перетаскиваемым в другие списки, в которых есть этот

...