0

DragMoveを介して特定の領域に移動した場合にウィンドウをドラッグするときに、その領域に半透明のウィンドウオーバーレイを表示したいと思いました。

ウィンドウの表示は問題なく機能しましたが、ドラッグしていたウィンドウの上に常に表示されていました。

オーバーレイを表示した後、.focus / .activateなどのさまざまなことを試しましたが、機能しませんでした。

各ウィンドウにはがWindowStyle="None" Topmost="True" ShowInTaskbar="False" あり、オーバーレイウィンドウにもがありましたIsHitTestVisible="False" Focusable="False"。ただし、表示がオンになっている場合でも、オーバーレイはフォーカスを取得します。

4

1 に答える 1

-1

私がうまくいったのは、メインウィンドウを非表示にしてからもう一度表示することだけでした。でも、ちらつきたくなかったので、ディスパッチャを無効にしました。これは美しく機能することになりました。オンラインで同様の問題を見つけることができなかったので、次の人を助けるためにこれを投稿すると思いました。

private void showOverlay()
{
  //show the docking window
  _overlayWindow.Visibility = Visibility.Visible;

  //problem here will be that the overlay window will be on top of main
  //this.focus   this.activate +other efforts did not work to bring main back on top

  //only thing i could find that would bring the main win on top is to hide/show it again.
  //i wrap this hide/show in a disabled dispatcher block so that the window never really gets hidden on screen

  using (var d = Dispatcher.DisableProcessing())
  {
    this.Visibility = Visibility.Hidden;
    this.Visibility = Visibility.Visible;
  }
}
于 2012-10-17T21:00:40.810 に答える