Перетащите между двумя пользовательскими элементами управления
У меня есть пользовательский элемент управления, который имеет элемент управления TreeView в нем как текущий...
<Grid>
<!-- Tree View -->
<TreeView Name="devices"
ItemsSource="{Binding Entities}" AllowDrop="True">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="EventPreviewMouseLeftButtonDown"/>
<EventSetter Event="Drop" Handler="EventDrop"/>
<EventSetter Event="DragOver" Handler="EventDragOver"/>
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
<Setter Property="FontWeight" Value="Normal" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<Image Width="25" Height="25" Source="{Binding ImagePath}" />
<Button Background="Transparent" BorderBrush="Transparent">
<TextBlock Text="{Binding Name}"/>
</Button>
<StackPanel.ToolTip>
<TextBlock Text="{Binding Description}"/>
</StackPanel.ToolTip>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
Я использую этот usercontrol из моего главного окна как текущий....
<StackPanel Grid.Column="0" Grid.Row="0" Orientation="Vertical" AllowDrop="False">
<local:DevicesTreeview x:Name="srcDevices" Height="220"/>
<local:DevicesTreeview x:Name="destDevices" Height="220"/>
</StackPanel>
Я пытаюсь перетащить листовой узел из 'srcDevices' и перетащить на листовой узел 'destDevices' с помощью DragDrop.DoDragDrop. Перетаскивание начинается, но не происходит событие перетаскивания (т.е. DragEnter/DragLeave/DragOver/Drop). Как я могу решить эту проблему?
Saquia
2 ответа
У вас есть AllowDrop="False" на вашей панели стека, я не знаю, остановит ли это вас, бросая на предметы в этом, но я бы удалил его и посмотрел, имеет ли это значение. Кроме того, ваши события отбрасывания относятся к элементу представления дерева, а не к представлению дерева. Такое поведение вы хотите? или вы хотите перейти в древовидную структуру, и в этом случае ваши обработчики событий должны быть там.
Спасибо за ваш ответ.
Я решил свою проблему. Сначала я попытался использовать текущие операторы для первоначального перетаскивания...
DataObject dragData = new DataObject (); DragDrop.DoDragDrop (this.devices, dragData, DragDropEffects.Link);
Но теперь я использую текущее утверждение, и теперь все событие перетаскивания срабатывает...
DragDrop.DoDragDrop (this.devices, treeViewItem, DragDropEffects.Move);
Таким образом, разница только в том, что второй параметр, который я посылаю, отличается.
еще раз спасибо
Saquia