为什么我不能将文件从资源管理器中删除到FlowDocumentReader以及如何修复它?

时间:2009-10-19 16:24:06

标签: wpf drag-and-drop cursor flowdocument

我正在尝试实现一项功能,让用户将文件拖到要在FlowDocumentReader中打开的应用程序中。

我的问题是,虽然我在FlowDocumentReader上有AllowDrop = true,但光标不会更改为“drop here”图标,而是更改为“drop is not allowed”图标。 这只发生在FlowDocumentReader,UI(窗口本身,其他控件)的所有其他部分按预期工作。 FlowDocumentReader实际上接收事件,并且可以处理丢弃,但是用户没有可视指示他可以在这里释放鼠标。

我也无法通过设置Cursor = Cursors.None来隐藏“不允许丢弃”光标

2 个答案:

答案 0 :(得分:2)

需要在FlowDocument中处理DragOver事件以允许在此处删除。

XAML:

<!--
    <FlowDocumentReader x:Name="fdr" Background="White">
    <FlowDocument x:Name="doc" AllowDrop="True" DragEnter="doc_DragOver" Drop="doc_Drop"  Background="White"/>
    </FlowDocumentReader>
-->
    <FlowDocumentReader x:Name="fdr" Background="White">
       <FlowDocument x:Name="doc" AllowDrop="True" DragOver="doc_DragOver" Drop="doc_Drop"  Background="White"/>
    </FlowDocumentReader>
代码背后的代码:

    private void doc_DragOver(object sender, DragEventArgs e)
    {
        e.Effects = DragDropEffects.All;
        e.Handled = true;
    }

    private void doc_Drop(object sender, DragEventArgs e)
    {
    }

答案 1 :(得分:0)

我找不到任何直接解决方法,所以这就是我最终的结果:

  • 我在FlowDocumentReader的顶部放置了一个网格。此网格具有销售颜色,不透明度为0(透明),可见性=折叠。此网格的目的是作为放置目标。
  • 当FlowDocumentReader中的FlowDocument收到DragEnter事件时,我将网格的可见性切换为Visible。网格开始接收拖动事件,光标停留在“drop here”形式。
  • 当网格收到Drop或DragLeave事件时,其可见性将恢复为Collapsed以允许FlowDocument接收鼠标事件

    <FlowDocumentReader x:Name="fdr" Grid.Row="1" Background="White">
        <FlowDocument x:Name="doc" DragEnter="doc_DragEnter" Background="White"/>
    </FlowDocumentReader>
    <Grid x:Name="dtg" Grid.Row="1" Background="White" Opacity="0"
        Drop="dtg_Drop" DragLeave="dtg_DragLeave" Visibility="Collapsed"/>