0

Xaml と C# を使用して UWP アプリを開発しています。これが私の問題です。

私のアプリは RichEditBox を使用してテキストを処理します。ユーザーがアプリを閉じるたびに、アプリ内からコピーされたクリップボードの内容が消去されます。この問題を解決するには、Clipboard.Flush() を使用する必要があります。わかりましたが、コピー プロセスを制御していない場合はどうなりますか。ユーザーが Crtl+C を押すか、RichEditBox コンテキスト メニューを使用してテキストをコピーすると、そのアクションをインターセプトできません。もう 1 つの回避策は、Clipboard.ContentChanged を使用することです。しかし、この状況で使用すると、何らかの理由でメソッドが無限ループを作成します。助けてください。

4

1 に答える 1

1

ユーザーがアプリを閉じるたびに、アプリ内からコピーされたクリップボードの内容が消去されます。

私の側でテストしたところ、Clipboard.SetContent()メソッドを使用してコンテンツをクリップボードにコピーすると、アプリを閉じた後、コンテンツはデフォルトでクリアされません。ただしCtrl+C、コンテキストメニューを使用または右クリックすると、前述のように、クリップボードへのコンテンツのコピーがクリアされます。

もう 1 つの回避策は、Clipboard.ContentChanged を使用することです。しかし、この状況で使用すると、何らかの理由でメソッドが無限ループを作成します

これを解決するには、Clipboard.ContentChangedイベント ハンドルが役立ち Ctrl+Cます。これは、コンテキスト メニューの両方または右クリックがこのイベントをトリガーするためです。ループは、あなたがしようとしている、 SetContentまたはトリガーを再びFlush発生させることによって引き起こされます。ContentChangedこれらのメソッドを呼び出す前に、イベント サブスクリプションの削除を試みることができます。例えば:

private async void Clipboard_ContentChanged(object sender, object e)
{
    Clipboard.ContentChanged -= Clipboard_ContentChanged;
    DataPackageView clipboardContent = Windows.ApplicationModel.DataTransfer.Clipboard.GetContent();
    var dataPackage = new DataPackage();
    dataPackage.SetText(await clipboardContent.GetTextAsync());
    Clipboard.SetContent(dataPackage);
    Clipboard.ContentChanged += Clipboard_ContentChanged;
   // Clipboard.Flush();
}

空の UWP を作成し、RichEditBox を追加し、Ctrl+C を使用してそこからコンテンツをコピーし、アプリを閉じます。

実際には、アプリが閉じられる前にトリガーされるアプリの中断イベントで、コンテンツをクリップボードに再設定できます。

 private async void OnSuspending(object sender, SuspendingEventArgs e)
 {
     var deferral = e.SuspendingOperation.GetDeferral();
     //TODO: Save application state and stop any background activity 
     DataPackageView clipboardContent = Windows.ApplicationModel.DataTransfer.Clipboard.GetContent();
     var dataPackage = new DataPackage();
     dataPackage.SetText(await clipboardContent.GetTextAsync());
     Clipboard.SetContent(dataPackage);          
  // Clipboard.Flush(); 
     deferral.Complete();
 }
于 2018-05-15T06:28:00.563 に答える