WPF MenuItem未填充可​​用的ContextMenu空间

时间:2016-03-04 08:39:44

标签: c# wpf user-interface mahapps.metro

我在使用MahApps.Metro的简单ContextMenu时遇到了一个奇怪的问题,没有任何额外的样式。将光标移动到文本顶部或稍微移动时,没有问题。但是当它移动得更远时,仍然在ContextMenu边界内,Cursor不再位于MenuItem之上。除了关闭ContextMenu之外,现在单击也不会导致任何操作。

enter image description here enter image description here

<ContextMenu ItemsSource="{Binding ContextItems}">
    <ContextMenu.ItemTemplate>
        <DataTemplate>
            <MenuItem Header="{Binding Text}" Command="{Binding Command}"/>
        </DataTemplate>
    </ContextMenu.ItemTemplate>
</ContextMenu>

我做错了什么?为什么MenuItem不使用可用空间?

2 个答案:

答案 0 :(得分:4)

如果你的ContextItems拥有一个包含viewmodels的集合,那么我认为这可以帮助你(未经测试):

<ContextMenu ItemsSource="{Binding ContextItems}">
    <ContextMenu.ItemContainerStyle>
        <Style TargetType="MenuItem">
            <Setter Property="Header" Value="{Binding Text}" />
            <Setter Property="Command" Value="{Binding Command}" />
        </Style>
    </ContextMenu.ItemContainerStyle>
</ContextMenu>

Command和Text应该是viewmodel对象的属性。

答案 1 :(得分:1)

我没有使用过MahApps.Metro。虽然您可以像这样覆盖模板

                <ContextMenu.ItemTemplate>
                <DataTemplate>
                      <MenuItem Header="{Binding Text}" Command="{Binding Command}"/>
                        <MenuItem.Template>
                            <ControlTemplate>
                                    <ContentPresenter Content="{Binding Header,RelativeSource={RelativeSource TemplatedParent}}">
                                    </ContentPresenter>
                            </ControlTemplate>
                        </MenuItem.Template>
                        </MenuItem>
                </DataTemplate>
            </ContextMenu.ItemTemplate>

我希望这会有所帮助。