【问题标题】:WPF C# Drag & Drop EventsWPF C# 拖放事件
【发布时间】:2011-04-15 20:45:40
【问题描述】:

我有一个画布,可以在上面放置一些工具来创建图表(位于 tabitem2 中)。

我想要做的是,当一个工具被放在画布上时,会将一个吐出文本的事件关联到一个文本框(位于 tabitem3)。

XAML:

<ListBox>
        <ListBox.Resources>
            <Style TargetType="{x:Type Image}">
                <Setter Property="Width" Value="100"/>
                <Setter Property="Height" Value="100"/>
                <EventSetter Event="MouseLeftButtonDown" Handler="DragImage"/>
            </Style>
        </ListBox.Resources>
        <ListBoxItem>
            <Image Source="toolitem1.png"></Image>
        </ListBoxItem>
    </ListBox>
 <Canvas x:Name="Canvas" AllowDrop="True" Background="Aqua" Drop="DropImage"/>

代码背后:

private void DragImage(object sender, MouseButtonEventArgs e)
    {

        Image image = e.Source as Image;
        DataObject data = new DataObject(typeof(ImageSource), image.Source);
        DragDrop.DoDragDrop(image, data, DragDropEffects.Copy);

    }


    private void DropImage(object sender, DragEventArgs e)
    {
        ImageSource image = e.Data.GetData(typeof(ImageSource)) as ImageSource;
        Image imageControl = new Image() { Width = image.Width, Height = image.Height, Source = image };
        Canvas.SetLeft(imageControl, e.GetPosition(this.Canvas).X);
        Canvas.SetTop(imageControl, e.GetPosition(this.Canvas).Y);
        this.Canvas.Children.Add(imageControl);
}

更新:

添加了一些示例代码并尝试了以下人员的建议,但无济于事。看起来当我尝试在我的 ListBoxItem 对象中使用 DragDrop.Drop 时,它会覆盖我的画布的 DropImage 事件,所以我仍然卡住了。

【问题讨论】:

    标签: c# wpf drag-and-drop


    【解决方案1】:

    每个放置目标只有一个事件。您想在该处理程序中利用的任何与源相关的信息都应作为数据参数的一部分传递给 DoDragDrop

    【讨论】:

      【解决方案2】:

      你看过drop event吗? 基本上,在 .net/wpf 4 中,有一个 DragDrop 类可以帮助解决这些问题。 Here 是有关此事的 MSDN 文档。

      [编辑]

      据我所见,您正在拖放图像。相反,我认为您需要做的是制作一些自定义对象来保存您的图像和一些数据。如果您将图像设置为依赖属性,则可以在列表框项中绑定到该属性,然后在放置事件中访问其他属性以获得所需的数据。

      【讨论】:

      • 是的,我有。我无法为每个项目获取唯一的丢弃事件。例如,我希望工具#1 放在画布上时会在我的文本框中吐出“测试”。如果我放弃工具#2,我希望它吐出“yaddayadda”。用一些示例代码编辑了我的问题。
      【解决方案3】:

      我认为this 的文章会对你有所帮助。还有part 2part 3

      祝你好运

      【讨论】:

      • 这仅描述了当拖动源在应用程序中并且无意向其他应用程序提供或消费数据时的DragDrop。应该有一个更简单的方法,似乎应该以某种方式使用PreviewDragOverPreviewDrop
      猜你喜欢
      • 2023-03-10
      • 2014-04-27
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多