2012-01-28 7 views
3

私はWPF 3.5でエディタを作成しようとしています。私は難しかった機能は:Imageオブジェクトを含むListBoxからテキストエディタに画像をドラッグ&ドロップしたいと思っています。実行時にRichTextBox内のFlowDocumentに画像をドラッグ

私は編集者のために使っていScrollViewer、内側RichTextBoxFlowDocumentの使用についてmsdn docsを読んだ:

<ScrollViewer> 
    <RichTextBox> 
     <FlowDocument AllowDrop="True" Drop="FlowDocument_Drop" DragOver="FlowDocument_DragOver"> 

     </FlowDocument> 
    </RichTextBox> 
</ScrollViewer> 

私は置くつもり何をシミュレートするテストImageコントロールを持っていますListBoxに:

<Image Grid.Row="0" Name="img" Source="test.png" 
      MouseMove="img_MouseMove" /> 

コードが背後にある次のようになります。

private void img_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (e.LeftButton == MouseButtonState.Pressed) 
     { 
      DragDrop.DoDragDrop(sender as DependencyObject, 
       new DataObject("ImageSource", (sender as Image).Source), DragDropEffects.Copy); 
     } 
    } 

    private void FlowDocument_Drop(object sender, DragEventArgs e) 
    { 
     if (e.Data.GetDataPresent("ImageSource")) 
     { 
      ImageSource img = (ImageSource)e.Data.GetData("ImageSource"); 

      (sender as FlowDocument).Blocks.Add(new BlockUIContainer(new Image() { Source = img })); 
     } 
    } 

    private void FlowDocument_DragOver(object sender, DragEventArgs e) 
    { 
     e.Effects = DragDropEffects.Copy; 

     if (e.Data.GetDataPresent("ImageSource")) 
     { 
      e.Effects = DragDropEffects.Copy | DragDropEffects.Move; 
     } 
    } 

私の問題は、FlowDocument_Dropメソッドが実行されないことと、画像がFlowDocumentの上にドラッグされたときに、そのドラッグが使用できないことをカーソルが示していることです。

イベントがなぜ発生しないのかわかりません。

答えて

3

DragOverイベントに、処理され、子にルーティングされていないことを通知する必要があります。

if (e.Data.GetDataPresent("ImageSource")) { 
    e.Effects = DragDropEffects.Copy; 
    e.Handled = true; 
} 
関連する問題