Гонг Wpf DragDrop: я не могу получить положение мыши, используя DragEventArgs в методах DragOver и Drop - PullRequest
0 голосов
/ 19 апреля 2020

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

У меня проблема с Gong DragDrop. Решение: у меня есть простой просмотр списка в что я могу, благодаря этой библиотеке, переупорядочивать элементы путем перетаскивания, это прекрасно работает в этом случае!

Теперь моя проблема заключается в следующем: я хочу получить координаты мыши относительно заданного c внешний UIElement (родительский scrollviewer) в событии DragOver предоставил

перетаскивание списка просмотра работает, как и должно, но в моем случае у меня есть два списка просмотра бок о бок внутри блока scrollViewer:

тот, что слева не может быть отредактирован
тот, что справа, - то, что пользователь будет редактировать / переупорядочивать

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

<ScrollViewer x:Name="parentScrollViewer">
<!-- 2 ListViews side by side, the one on the right is the one -->
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="5" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <ListView
                    Grid.Row="1"
                    IsHitTestVisible="False"
                    BorderThickness="0"
                    FontWeight="Bold"
                    ItemsSource="{Binding ContentStructure}"
                    ScrollViewer.CanContentScroll="False"
                    >
                </ListView>
                <GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Stretch" />


                <!--listview where drag and drop is implemented !-->
                <ListView
                    x:Name="dragDropListView"
                    Grid.Row="1"
                    Grid.Column="2"
                    BorderThickness="1px,0,0,0"
                    AllowDrop="True"
                    dd:DragDrop.IsDragSource="True"
                    dd:DragDrop.IsDropTarget="True"
                    dd:DragDrop.DropHandler="{Binding}"
                    PreviewMouseWheel="FilesGrid_PreviewMouseWheel"
                    SelectionChanged="FilesGrid_SelectionChanged"
                    ItemsSource="{Binding SourceFiles, UpdateSourceTrigger=PropertyChanged}"
                    ScrollViewer.CanContentScroll="False"
                    >
                </ListView>
            </Grid>
</ScrollViewer>

Реализуя интерфейс IDropTarget в моей модели представления, я получаю эти методы, которые получают в качестве параметров идентификатор данные ropInfo Вот где я застрял, пытаясь найти доступ к самому объекту события (DragEventArg), чтобы использовать его и вызвать GetPosition.
Я пробовал Mouse.GetPosition (parentScrollViewer), например, но он не обновляет координаты, когда я перемещаю мышь

        public void DragOver(IDropInfo dropInfo)
        {
            // e.GetPosition(parentScrollViewer) won't work here
            // dropInfo has a dropPosition property but it gives coordinates from the mouse relative
            // to the listView where the drag is happening not the parentScrollViewer
        }

        public void Drop(IDropInfo dropInfo)
        {
            throw new NotImplementedException();
        }

Пожалуйста, дайте мне знать, если у вас есть какие-либо советы или идеи
Спасибо!

...