2011-04-15 14 views
2

私はいくつかのツールをドロップしてダイアグラムを作成しています(これはtabitem2にあります)。WPF C#ドラッグアンドドロップイベント

私が探しているのは、キャンバス上にツールをドロップすると、テキストを吐き出すイベントが(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); 
} 

UPDATE:

は、いくつかのサンプルコードを追加しましたし、無駄に以下の人々からの提案を試してみました。それは私のキャンバスのDropImageイベントをオーバーライドする私のListBoxItemオブジェクトでDragDrop.Dropを使用しようとすると、私はまだスタックしているように見えます。

答えて

-1

私はthisの記事が参考になると思います。 part 2part 3もあります。

幸運

+0

これは、ドラッグソースがアプリケーション内にあり、データの提供または使用を意図していない他のアプリケーションから。もっと簡単な方法があるはずです。何とか 'PreviewDragOver'と' PreviewDrop'をどうにか使うように思えます。 – binki

0

あなたがdrop event見てきましたか? basiclly .net/wpf 4には、これらの問題を解決するためのDragDropクラスがあります。 Hereは、この問題に関するMSDNの文書です。

[EDIT]

私が見ていたものから、あなたは画像をドロップ/ドラッグされています。私はあなたがしなければならないことは、あなたのイメージといくつかのデータを保持するカスタムオブジェクトを作ることだと思います。イメージを依存関係のプロパティにする場合は、リストボックスアイテムのイメージにバインドし、ドロップイベントで他のプロパティにアクセスして、必要なデータを取得します。

+0

はい、あります。私は各項目の一意のドロップイベントを取得することができません。たとえば、キャンバスにドロップしたときにツール#1を使用すると、テキストボックスに「テスト」が表示されます。もし私がツール#2を落とすなら、それは "yaddayadda"を吐き出すことを望む。いくつかのサンプルコードで私の質問を編集しました。 –

0

ドロップターゲットごとに1つのイベントしかありません。そのハンドラで利用したいあらゆるソース関連情報は、データパラメータの一部としてDoDragDropに渡す必要があります