私が書いているアプリケーションには、アプリケーションの状態に関する情報をユーザーに表示するサイドバーがあります。場合によっては、ユーザーはサイドバーのさまざまな要素にカーソルを合わせて、より具体的な詳細を表示できます。これらの詳細は、Bootstrap のPopover
コントロールの動作を模倣するコントロールを使用してユーザーに表示されます。ウィンドウ全体にまたがる非表示のオーバーレイを使用してこれを実現しCanvas
、「ポップオーバー」自体は、Canvas
計算さCanvas.Left
れたCanvas.Top
プロパティを使用して、これに相対的に配置されます。
これは、私のアプリケーションの現在の XAML を (非常に単純化して) 示したものです。
<Window>
<Grid x:Name="container">
<.. a lot of various nested elements ..>
<StackPanel x:Name="sidepanel">
.. content of the sidepanel control ..
</StackPanel>
</.. a lot of various nested elements ..>
<Canvas x:Name="overlay">
.. content of the Popover control ..
</Canvas>
</Grid>
</Window>
これはうまく機能しますが、この機能を 1 つのコントロールにリファクタリングしたいと考えています。ただし、どうすればよいかわかりません。カスタムの XAML 定義にオーバーレイがUserControl
含まれている場合Canvas
、現在アプリケーション内に配置されているのと同じ方法で、コントロールのサイドパネル部分を配置できません。ただし、Canvas
適切に動作させるには、ウィンドウ全体にオーバーレイを配置する必要があるため、オーバーレイをサイドパネル内にネストすることはできません。
UserControl
論理ツリーの異なる部分に配置できるシングルを定義する方法はありますか? または、この効果を達成するためのより良い方法はありますか?