Как я знаю, было ли перетаскивание/отбрасывание отменено в WPF

Я пишу пользовательский элемент управления в WPF, который основан на ListBox. Одна из основных частей функциональности является способностью переупорядочить список путем перетаскивания объектов вокруг. Когда пользователь перетаскивает объект, я изменяю объекты Opacity к 50% и физически перемещают объект в ObservableCollection в моем ViewModel в зависимости от того, где пользователь хочет это. На событии отбрасывания я изменяюсь Opacity назад к 100%.

Проблема, которую я имею, состоит в том, что, если пользователь перетаскивает объект от моего управления и отбрасывает его где-то в другом месте затем, я должен измениться Opacity назад к 100% и кладут обратно объект туда, где это было, когда пользователь запустил перетаскивание. Существует ли событие, которое я могу обработать для получения этого действия? Если не там какой-либо другой хитрый путь состоит в том, чтобы решить эту проблему?

5
задан Jon Mitchell 7 April 2010 в 08:37
поделиться

2 ответа

Предполагая, что вы используете встроенную функцию перетаскивания, вы можете использовать возвращаемое значение метода DoDragDrop. Если цель перетаскивания не принимает перетаскиваемый объект, то DoDragDrop возвращает DragDropEffects.None.

Это, конечно, предполагает, что другие элементы управления в вашей форме не позволяют отбрасывать элементы вашего списка.

15
ответ дан 18 December 2019 в 10:43
поделиться

Я уже делал это с помощью триггеров событий в XAML. В моем случае они были прозрачными (30% непрозрачности) до этого, и когда пользователь перетаскивает, непрозрачность устанавливается на 100%.

<EventTrigger RoutedEvent="DragDrop.DragEnter">
  <BeginStoryboard Storyboard="{StaticResource FadeInStoryboard}" x:Name="FadeInStoryboard_BeginStoryboard1"/>
</EventTrigger>
<EventTrigger RoutedEvent="DragDrop.DragLeave">
  <BeginStoryboard Storyboard="{StaticResource FadeOutStoryboard}" x:Name="FadeOutStoryboard_BeginStoryboard1"/>
</EventTrigger>

Затем раскадровки оживляют непрозрачность

<Storyboard x:Key="FadeInStoryboard">
    <DoubleAnimation To="1" Duration="0:00:00.2" Storyboard.TargetName="UserControl" Storyboard.TargetProperty="(UIElement.Opacity)" />
</Storyboard>
<Storyboard x:Key="FadeOutStoryboard">
  <DoubleAnimation To="0.3" Duration="0:00:00.2" Storyboard.TargetName="UserControl" Storyboard.TargetProperty="(UIElement.Opacity)" />
</Storyboard>
1
ответ дан 18 December 2019 в 10:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: