WPF拖放C#拖动图像

本文关键字:图像 拖动 拖放 WPF | 更新日期: 2023-09-27 18:22:14

i用数据库中的答案动态填充一个dock面板,并用来自数据库的问题填充另一个dockpanel。答案将被填充为Labels,我试图用标签拖放到textblock。是的,我可以拖放,但问题是我也想拖动标签。例如,如果标签内容是Hello,我希望Hello也用单词"Hello"拖过去,目前,当我拖动它时,它不会拖动单词,但当我将它拖到文本框中时,单词"Hello"就会被删除。我想把动画或单词和光标一起拖动。

这是我的代码:

        private void PopulateQuestion(int activityID, int taskID)
    {
        IList<Model.question> lstQuestion = qn.GetRecords(taskID, activityID);
        StackPanel sp = new StackPanel();
        StackPanel stp = new StackPanel();
        foreach (Model.question qhm in lstQuestion)
        {
            StackPanel sp1 = new StackPanel() { Orientation = Orientation.Horizontal }; // Question
            TextBlock tb = new TextBlock();
            tb.Text = qhm.QuestionContent;
            tb.FontWeight = FontWeights.Bold;
            tb.FontSize = 24;
            sp1.Children.Add(tb);
            StackPanel sp2 = new StackPanel() { Orientation = Orientation.Horizontal }; // Answer
            Label tb1 = new Label();
            tb1.Content = qhm.Answer;
            tb1.FontWeight = FontWeights.Bold;
            tb1.FontSize = 24;
            tb1.MouseLeftButtonDown += tb1_Click;
            sp2.Children.Add(tb1);
            TextBox tbox = new TextBox();
            tbox.Width = 100;
            tbox.FontSize = 24;
            tbox.AllowDrop = true;
            tbox.FontWeight = FontWeights.Bold;
            if (qhm.Answer.Trim().Length > 0 )
            {
                sp1.Children.Add(tbox);
            }
            sp.Children.Add(sp1);
            stp.Children.Add(sp2);
        }
        dockQuestion.Children.Add(sp);
        dockAnswer.Children.Add(stp);
    }
    private void tb1_Click(object sender, RoutedEventArgs e)
    {
        Label lbl = (Label)sender;
        DataObject dataObj = new DataObject(lbl.Content);
        DragDrop.DoDragDrop(lbl, dataObj, DragDropEffects.All);
        lbl.IsEnabled = false;
        lbl.Foreground = (SolidColorBrush)new BrushConverter().ConvertFromString("#FFFB3B46"); // Red
    }

WPF拖放C#拖动图像

您可以按照下面链接中列出的策略进行操作,该策略实质上创建了一个新窗口,并使用鼠标光标更新窗口位置。

http://blogs.msdn.com/b/jaimer/archive/2007/07/12/drag-drop-in-wpf-explained-end-to-end.aspx

因此,页面的要点是使用Adorner来装饰光标。

你们可以用这个。DragSource事件处理程序上的DragSource.GiveFeedback和其他事件来设置Adorner。

一旦你有了事件处理程序,你就有机会做一些事情。

//Here we create our adorner.. 
_adorner = new DragAdorner(DragScope, (UIElement)this.dragElement, true, 0.5);
_layer = AdornerLayer.GetAdornerLayer(DragScope as Visual);
_layer.Add(_adorner);

所以你可以通过子类化来创建自己的装饰器。你可以在这里找到更多关于创建自定义装饰器的信息:

http://msdn.microsoft.com/en-us/library/ms743737.aspx

看看这个http://blogs.msdn.com/b/adamroot/archive/2008/02/19/shell-style-drag-and-drop-in-net-wpf-and-winforms.aspx

默认的wpf拖动&drop的动画很难看,如果你想在拖动时显示一些文本或图像,你需要多做点什么。