WPF MenuItem 未填充可用的 ContextMenu space
WPF MenuItem not filling available ContextMenu space
我在使用 MahApps.Metro 且没有任何其他样式的简单上下文菜单时遇到了一个奇怪的问题。将光标移动到文本顶部或稍微围绕它移动时,没有问题。但是当它移得更远时,仍然在 ContextMenu 范围内,Cursor 不再位于 MenuItem 的顶部。除了关闭上下文菜单外,现在单击也不会导致任何操作。
<ContextMenu ItemsSource="{Binding ContextItems}">
<ContextMenu.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding Text}" Command="{Binding Command}"/>
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
我做错了什么?为什么 MenuItem 不使用可用的 space?
我没用过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>
希望对您有所帮助。
如果您的 ContextItems
拥有一个包含视图模型的集合,那么我认为这可以帮助您(未测试):
<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>
命令和文本应该是视图模型对象的属性。
我在使用 MahApps.Metro 且没有任何其他样式的简单上下文菜单时遇到了一个奇怪的问题。将光标移动到文本顶部或稍微围绕它移动时,没有问题。但是当它移得更远时,仍然在 ContextMenu 范围内,Cursor 不再位于 MenuItem 的顶部。除了关闭上下文菜单外,现在单击也不会导致任何操作。
<ContextMenu ItemsSource="{Binding ContextItems}">
<ContextMenu.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding Text}" Command="{Binding Command}"/>
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
我做错了什么?为什么 MenuItem 不使用可用的 space?
我没用过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>
希望对您有所帮助。
如果您的 ContextItems
拥有一个包含视图模型的集合,那么我认为这可以帮助您(未测试):
<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>
命令和文本应该是视图模型对象的属性。