画面の端に近すぎるためにcontextMenuの配置が自動的に調整されるタイミングを判断する方法を知っている人はいますか?
私のシナリオは、2つの丸い角と2つの正方形の角を持つcontextMenuがあるというものです。メニューが開いたら、下の2を丸めます...メニューが上に開いている場合は、上の2を丸めます。問題は、バインドするイベントまたはプロパティが見つからないことです。これにより、メニューが取得されたときに通知されます。その方向は自動的に変わりました。
試してみるためのいくつかの簡略化されたサンプルコードを次に示します。ウィンドウが画面の上部にあるときにクリックすると、メニューが表示されなくなります。ウィンドウを画面の下部に移動すると、メニューが表示されます。
<Window x:Class="menuRedirection.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="100" Width="200">
<DockPanel Name="panel" ContextMenuOpening="DockPanel_ContextMenuOpening">
<DockPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="item"/>
<MenuItem Header="item"/>
<MenuItem Header="item"/>
<MenuItem Header="item"/>
</ContextMenu>
</DockPanel.ContextMenu>
<Rectangle DockPanel.Dock="Bottom" Name="menuTarget" Fill="Red" Height="10"/>
<TextBlock DockPanel.Dock="Top" Text="right click for context menu"/>
</DockPanel>
</Window>
private void DockPanel_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
ContextMenuService.SetPlacement(panel, PlacementMode.Bottom);
ContextMenuService.SetPlacementTarget(panel, menuTarget);
}
これが実際のアプリケーションの外観です。丸みを帯びた角を調整するために知っておく必要があるという私の問題を確認できます。