WPF中的ContextMenu过宽。

3
我在WPF中的ContextMenu遇到了问题。菜单太宽了 - 它的宽度是我放在上面的项目的宽度,再加上大约50到100像素。因此,当您打开菜单时,它不是干净的选项或按钮列表,而是两侧有很多灰色空间。我该怎么解决这个问题?
编辑:这是我的菜单XAML:
<ContextMenu Padding="0">
    <Button Content="Close Tab" Height="23" Name="closetabbutton" Width="75" Margin="0,0,0,0" Click="closetabbutton_Click" />
    <TextBox Height="23" Name="renamebox" Width="75" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ClipToBounds="True" TextChanged="renamebox_TextChanged" />
    <Button Content="Close Menu" Height="23" Name="closemenubutton" Width="75" Margin="0,0,0,0" Click="closemenubutton_Click" />
</ContextMenu>

从可用性的角度来看,这似乎是一种不寻常的使用上下文菜单的方式。通常情况下,您会将菜单项添加到上下文菜单中,而不是按钮。 - Tim Lloyd
@chibacity:有菜单项吗?如果我将其更改为“MenuItem”,则文本不会显示,即使我将内容属性更改为标头属性。 - Puppy
请查看我的答案更新,其中包含代码示例。 - Tim Lloyd
1个回答

2
这个空间左侧是为图标保留的,右侧是输入手势文本(例如Ctrl+C)。这是设计上的安排。
如果您希望更改这一点,您需要创建自己的ContextMenu样式。以下是如何实现的示例:

http://www.dev102.com/2008/06/20/how-to-create-a-wpf-custom-context-menu/

更新:
根据我的问题评论,通常情况下,菜单项应该用在你使用按钮的地方。例如:
<Grid.ContextMenu>
    <ContextMenu>
        <MenuItem Name="mnuClose" Header="Close tab" InputGestureText="Ctrl+C" />
        <MenuItem Name="mnuRename">
            <MenuItem.Header>
                <TextBox Name="txtRename" Width="100" />
            </MenuItem.Header>
        </MenuItem>
    </ContextMenu>
</Grid.ContextMenu>

我需要自己编写代码来识别InputGestureText吗? - Puppy
InputGestureText仅用于显示目的,并且旨在在手动连接手势时使用。如果将RoutedCommand绑定到菜单项并且它具有KeyGesture,则菜单项将自动获取手势文本。不幸的是,这是一个相当复杂的主题。 - Tim Lloyd
1
我知道这个已经有10年没有更新了,但是链接现在已经失效了。 - derekantrican
因此,这里已经“不鼓励”使用链接的原因。 - johnc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接