Перетащите между двумя пользовательскими элементами управления - PullRequest
0 голосов
/ 26 ноября 2009

У меня есть пользовательский элемент управления, в котором есть элемент управления 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>

Я использую этот пользовательский контроль из моего главного окна как текущий ....

<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 ]

1 голос
/ 26 ноября 2009

У вас есть AllowDrop = "False" на вашей панели стека, я не знаю, остановит ли это вас, бросая на предметы в этом, но я бы удалил его и посмотрел, будет ли это иметь значение. Кроме того, ваши события перетаскивания относятся к элементу представления дерева, а не к представлению дерева. Такое поведение вы хотите? или вы хотите перейти в древовидное представление, и в этом случае ваши обработчики событий должны быть там.

Учебник по перетаскиванию

0 голосов
/ 30 ноября 2009

Спасибо за ваш ответ.

Я решил свою проблему. Сначала я попытался использовать текущие операторы для первоначального перетаскивания ...

DataObject dragData = new DataObject (); DragDrop.DoDragDrop (this.devices, dragData, DragDropEffects.Link);

Но теперь я использую текущее утверждение, и теперь все событие перетаскивания срабатывает ...

DragDrop.DoDragDrop (this.devices, treeViewItem, DragDropEffects.Move);

Так что разница только в том, что второй параметр, который я посылаю, отличается.

Еще раз спасибо

Saquia

...