基本上,我是通过将标签拖到文本框来使用文本框和标签进行拖放操作。文本框和标签在同一个 for 循环中创建。
我已经像这样动态创建了文本框(文本框是放置目标):
TextBox tbox = new TextBox();
tbox.Width = 250;
tbox.Height = 50;
tbox.AllowDrop = true;
tbox.FontSize = 24;
tbox.BorderThickness = new Thickness(2);
tbox.BorderBrush = Brushes.BlanchedAlmond;
tbox.Drop += new DragEventHandler(tbox_Drop);
if (lstQuestion[i].Answer.Trim().Length > 0)
{
wrapPanel2.Children.Add(tbox);
answers.Add(lbl.Content.ToString());
MatchWords.Add(question.Content.ToString(), lbl.Content.ToString());
}
我也像这样动态创建标签(标签是拖动目标):
Dictionary<string, string> shuffled = Shuffle(MatchWords);
foreach (KeyValuePair<string, string> s in shuffled)
{
Label lbl = new Label();
lbl.Content = s.Value;
lbl.Width = 100;
lbl.Height = 50;
lbl.FontSize = 24;
lbl.DragEnter += new DragEventHandler(lbl_DragEnter);
lbl.MouseMove += new MouseEventHandler(lbl_MouseMove);
lbl.MouseDown +=new MouseButtonEventHandler(lbl_MouseDown);
// lbl.MouseUp +=new MouseButtonEventHandler(lbl_MouseUp);
dockPanel1.Children.Add(lbl);
}
我这里有 2 个问题。
第一。我正在使用 tbox.drop 事件来显示 MessageBox.Show( something ) ;在拖放目标但不起作用时显示消息框。
这是我的代码:
private void tbox_Drop(object sender, DragEventArgs e)
{
MessageBox.Show("Are you sure?");
}
其次,我还想在拖放目标时清除 tbox.Text,因为之前我可能将其他拖放目标拖放到 tbox 中。所以我想每次将目标拖到文本框时都清除 tbox.Text 并放下拖动目标。
我该怎么做?我被困在我应该为此使用哪个事件以及如何从这些事件处理程序访问 tbox ?
最佳答案
它对我有用。
private void lbl_MouseDown(object sender, MouseButtonEventArgs e)
{
Label _lbl = sender as Label;
DragDrop.DoDragDrop(_lbl, _lbl.Content, DragDropEffects.Move);
}
如果您仅将它们用于拖动目的,则不需要 Label
的 MouseMove
和 DragEnter
事件。
将 Drop
事件替换为 TextBox
的 PreviewDrop
如下所示:
tbox.Drop += new DragEventHandler(tbox_Drop);
有了这个
tbox.PreviewDrop += new DragEventHandler(tbox_PreviewDrop);
private void tbox_PreviewDrop(object sender, DragEventArgs e)
{
(sender as TextBox).Text = string.Empty;
}
关于c# - WPF C# 拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17872707/