私はContextMenu
いくつかのトップレベルで構成されているを持っていますMenuItem
。そのうちの1つには、次のようにバインドされたアイテムのサブメニューが含まれItemsSource
ています。
<ContextMenu Style="{x:Null}">
<MenuItem Header="{Binding MenuLabelNewSolution}" Command="New"/>
<MenuItem Header="{Binding MenuLabelOpenSolution}" Command="Open"/>
<MenuItem Header="{Binding MenuLabelRecentSolutions}"
ItemsSource="{Binding RecentSolutions, Mode=OneWay}">
<MenuItem.ItemTemplate>
<DataTemplate>
<Button Style="{x:Null}" Margin="0" Content="Test"
Command="vm:CustomCommands.ExplicitOpen"/>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
<MenuItem Header="{Binding MenuLabelSaveAll}" Command="vm:CustomCommands.SaveAll"/>
</ContextMenu>
上記のサブメニュー項目はButton
、問題を説明するためのテストです。
以下では、問題を説明するために、展開された列Style
のを絞り込みました。MenuItem
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="Black" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type MenuItem}">
<Border Style="{x:Null}" Background="LightBlue"
BorderBrush="Black" BorderThickness="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<ContentPresenter Grid.Column="1" ContentSource="Header" />
<Popup Style="{x:Null}" Margin="0"
IsOpen="{Binding Path=IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}"
Placement="Right" VerticalOffset="-3">
<StackPanel Style="{x:Null}" Background="Red"
Margin="0" IsItemsHost="True" />
</Popup>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
私が抱えている問題は、下の画像に示すように、サブメニューに多くの非アクティブなデッドスペースがあることです。
MenuItem
ユーザーがトップレベルのデッドスペース(アイコンとジェスチャテキストに使用される)をクリックすると、メニューコマンドが実行されます。ただし、ユーザーがサブメニュー項目のテストボタンの外側のデッドスペースのいずれかをクリックした場合、メニューコマンドは実行されません。
Style
サブメニューレベルで余分なスペースを取り除く、または少なくともメニューコマンドに関してサブメニュー領域全体をアクティブにするために賢明な方法はありますか?
Style
ちなみに、のデフォルトに戻してMenuItem
も、同じ問題が発生します。