私が書いているアプリケーションには、アプリケーションの状態に関する情報をユーザーに表示するサイドバーがあります。場合によっては、ユーザーはサイドバーのさまざまな要素にカーソルを合わせて、より具体的な詳細を表示できます。これらの詳細は、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論理ツリーの異なる部分に配置できるシングルを定義する方法はありますか? または、この効果を達成するためのより良い方法はありますか?