Перетаскивайте между двумя пользовательскими элементами управления

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

Сакия


person Saquia Naz    schedule 25.11.2009    source источник


Ответы (2)


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

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

person Aran Mulholland    schedule 25.11.2009
comment
+1 за ссылку на учебник. Это помогает во многом разобраться. - person Dillie-O; 18.01.2010

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

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

DataObject dragData = новый DataObject (); DragDrop.DoDragDrop (this.devices, dragData, DragDropEffects.Link);

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

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

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

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

Сакия

person Saquia Naz    schedule 30.11.2009