0

データベースからの回答をドックパネルに動的に入力し、データベースからの質問を別のドックパネルにも動的に入力します。回答は 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
    }
4

2 に答える 2

1

以下のリンクで概説されている戦略に従うことができます。これにより、基本的に新しいウィンドウが作成され、ウィンドウの位置がマウス カーソルで更新されます。

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

したがって、このページの主なポイントは、Adorner を使用してカーソルを装飾することです。

This.DragSource.GiveFeedback および DragSource イベント ハンドラーのその他のイベントを使用して、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);

そのため、サブクラス化することで独自の Adorner を作成できます。カスタム アドナーの作成に関する詳細情報は、次の場所にあります。

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

于 2013-07-15T05:01:43.637 に答える
0

これを見てください http://blogs.msdn.com/b/adamroot/archive/2008/02/19/shell-style-drag-and-drop-in-net-wpf-and-winforms.aspx

デフォルトの wpf ドラッグ & ドロップのアニメーションは醜いです。ドラッグ中にテキストや画像を表示したい場合は、さらに何かをする必要があります。

于 2013-07-15T06:22:30.197 に答える