0

私は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も、同じ問題が発生します。

デフォルトメニュー

4

1 に答える 1

0

問題は私にはまったくありませんでしたが、サブメニュー項目MenuItem Styleにを使用したためです。DataTemplate次の変更でうまくいきました。

<ContextMenu>
    <MenuItem Header="{Binding MenuLabelNewSolution}" Command="New"/>
    <MenuItem Header="{Binding MenuLabelOpenSolution}" Command="Open"/>
    <MenuItem Header="{Binding MenuLabelRecentSolutions}"
              ItemsSource="{Binding RecentSolutions, Mode=OneWay}">
        <MenuItem.ItemContainerStyle>
            <Style TargetType="MenuItem">
                <Setter Property="Header" Value="{Binding Header}"/>
                <Setter Property="Command" Value="vm:CustomCommands.ExplicitOpen"/>
            </Style>
        </MenuItem.ItemContainerStyle>
    </MenuItem>
    <MenuItem Header="{Binding MenuLabelSaveAll}" Command="vm:CustomCommands.SaveAll"/>
</ContextMenu>
于 2013-03-19T04:43:21.160 に答える