4

WPF でホストされている Windows フォーム コントロールにかなり大きな問題があります。たとえば、ユーザーがウィンドウをスクロールすると、ホストされたコントロールはウィンドウの上に移動しますが、非表示にする必要があります。

これは既知の問題であり、ホストされたコントロールのデフォルトの動作であることは知っていますが、コントロールの可視性が何らかの形でバインドされている場合、つまり他のコントロールが重なっているかどうかにかかわらず、解決できると思います。他のコントロールが重なっている場合は、Collapsed または Hidden になり、重なっていない場合は Visible になります。

これに対して何らかの解決策を作成しましたが、ScrollViewer の ScrollChanged イベントで実行しましたが、特別な状況でのみ機能します。ホストされているコントロールに適用できるように、バインディングでそれを達成する方法を誰かが知っている場合は、アイデアを共有してください。

4

2 に答える 2

1

この同じ問題に対して、興味深いものを実装しました...

Windows フォーム ホストは Z オーダーの影響を受けないため、スクロール ビューアはスクロール ビューアの下に表示される領域を部分的に非表示にしたりクリップしたりできません。

そこで、2 つの選択肢がありました...

  1. Windows フォーム ホストを使用して、残りの WPF UI をホストします。これは、UI の所有権を逆にすることを意味します。WindowsFormsHost は、WPF UI をホストする WinForms ベースのスクロール ビューアを持つすべての UI をホストする必要があります。

  2. Windowsフォームホストの計算された高さのスクロールオフセットを実装し、ユーザーがスクロールするときに、このオフセットをスクロールビューアーの位置に追加し、windformsホストを自分で非表示にします(Visibility = HiddenおよびNOT Collapsed )。このようにして、winforms ホストを部分的にスクロールすることはできませんが、スクロール ビューアーから完全にスクロールするという効果が得られます。また、winformshost はHidden(折りたたまれていない) ため、スクロール ビューアーの下の非表示領域内でその高さを占有し続けます (それにより、スクロール位置が維持されます)。

これが正しい方向に導くかどうか教えてください。

于 2011-09-20T08:26:59.020 に答える