1

ユーザーがファイルをアプリケーションにドラッグしてFlowDocumentReaderで開くことができる機能を実装しようとしています。

私の問題は、FlowDocumentReaderにAllowDrop = trueがありますが、カーソルが「ここにドロップ」アイコンに変更されず、代わりに「ドロップは許可されていません」アイコンに変更されることです。これはFlowDocumentReaderでのみ発生し、UIの他のすべての部分(ウィンドウ自体、他のコントロール)は期待どおりに機能します。FlowDocumentReaderは実際にイベントを受信し、ドロップを処理することは可能ですが、ユーザーはここでマウスを離すことができることを視覚的に示すことはできません。

また、Cursor = Cursors.Noneを設定しても、「ドロップは許可されていません」カーソルを非表示にすることはできません。

4

2 に答える 2

3

ここにドロップできるようにするには、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)
{
}
于 2010-01-11T06:43:35.633 に答える
0

これを解決する直接的な方法を見つけることができなかったので、これが私が最終的に得たものです:

  • FlowDocumentReaderの上にグリッドを配置しました。このグリッドの色は販売されており、不透明度は0(透明)で、Visibility=Collapsedです。このグリッドの目的は、ドロップターゲットとして機能することです。
  • FlowDocumentReader内のFlowDocumentがDragEnterイベントを受信すると、グリッドの可視性をVisibleに切り替えます。グリッドはドラッグイベントの受信を開始し、カーソルは「ここにドロップ」フォームのままになります。
  • グリッドがDropまたはDragLeaveイベントを受信すると、その可視性は折りたたみに戻され、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"/>
    
于 2009-10-20T15:56:30.543 に答える