Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在WPF中查看拖放元素?_Wpf_Drag And Drop - Fatal编程技术网

如何在WPF中查看拖放元素?

如何在WPF中查看拖放元素?,wpf,drag-and-drop,Wpf,Drag And Drop,我有一个列表框和一个文档面板。列表框包含应该拖到停靠面板上的项目。我通过遵循这一点实现了这一点 但有几件事我不明白: 拖动时,我只看到一个光标。我想看看我的清单上的项目 拖动以使用光标四处移动。我该怎么做? DragDropEffect特性仅适用于不同的光标设计,还是具有 更高的目标 如何使列表项在放到列表框中后从列表框中消失 DockPanel? 我想在我拖动的项目上强制一些动画,比如辉光 下降。我应该使用哪个触发器/设置器? 以下是我的基本拖放代码: ListBox部分的代码隐藏 谢谢你的帮

我有一个列表框和一个文档面板。列表框包含应该拖到停靠面板上的项目。我通过遵循这一点实现了这一点

但有几件事我不明白:

拖动时,我只看到一个光标。我想看看我的清单上的项目 拖动以使用光标四处移动。我该怎么做? DragDropEffect特性仅适用于不同的光标设计,还是具有 更高的目标 如何使列表项在放到列表框中后从列表框中消失 DockPanel? 我想在我拖动的项目上强制一些动画,比如辉光 下降。我应该使用哪个触发器/设置器? 以下是我的基本拖放代码:

ListBox部分的代码隐藏
谢谢你的帮助

好吧,过了一会儿,我找到了一些答案,自己发现了一些东西

对于DragDropEffect枚举,使用它有两个原因:

区分项目是在代码中移动还是复制。它就像一面旗帜,最常用的用法如下:

如果e.DragDropEffect==DragDropEffect.Move { ... } 否则

根据枚举值装饰鼠标光标。这样,它会告诉用户是否正在移动或复制项目


关于拖放可视化,这里有一个链接,链接到包含参考的帖子,这是拖放构建的一个很好的起点:

好的,过了一会儿,我找到了一些答案,自己发现了一些东西

对于DragDropEffect枚举,使用它有两个原因:

区分项目是在代码中移动还是复制。它就像一面旗帜,最常用的用法如下:

如果e.DragDropEffect==DragDropEffect.Move { ... } 否则

根据枚举值装饰鼠标光标。这样,它会告诉用户是否正在移动或复制项目

关于拖放可视化,这里有一个指向包含参考的帖子的链接,这是拖放构建的一个很好的起点:

private Point startPosition;

private void ListBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    startPosition = e.GetPosition(null);
}

private void ListBox_PreviewMouseMove(object sender, MouseEventArgs e)
{
    Point currentPosition;
    Vector offset;
    ListBox listBox;
    ListBoxItem item;
    Match match;
    DataObject dragData;

    currentPosition = e.GetPosition(null);
    offset = startPosition - currentPosition;

    if (e.LeftButton == MouseButtonState.Pressed &&
        (Math.Abs(offset.X) > SystemParameters.MinimumHorizontalDragDistance ||
         Math.Abs(offset.Y) > SystemParameters.MinimumVerticalDragDistance))
    {
        // Get the data binded to ListBoxItem object, which is "match"
        listBox = sender as ListBox;
        item = FindAnchestor<ListBoxItem>((DependencyObject)e.OriginalSource);
        match = (Match)listBox.ItemContainerGenerator.ItemFromContainer(item);

        dragData = new DataObject("match", match);
        DragDrop.DoDragDrop(item, dragData, DragDropEffects.Move);
    }
}
private void DockPanel_DragEnter(object sender, DragEventArgs e)
{
    if (!e.Data.GetDataPresent("match") ||
        sender == e.Source)
    {
        e.Effects = DragDropEffects.None;
    }
}

private void DockPanel_Drop(object sender, DragEventArgs e)
{
    Match match;
    DockPanel matchSlot;
    ContentPresenter contentPresenter;
    Binding binding;

    if (e.Data.GetDataPresent("match"))
    {
        match = e.Data.GetData("match") as Match;
        matchSlot = sender as DockPanel;

        contentPresenter = new ContentPresenter();
        contentPresenter.ContentTemplate = this.FindResource("MatchTemplate") as DataTemplate;
        binding = new Binding();
        binding.Source = match;
        contentPresenter.SetBinding(ContentPresenter.ContentProperty, binding);

        matchSlot.Children.Clear();
        matchSlot.Children.Add(contentPresenter);
    }
}