ContextMenu ItemsSource绑定问题

时间:2011-09-23 01:02:23

标签: wpf binding mvvm contextmenu itemssource

ContextMenu与wpf usercontrol存在问题。我写了一个usercontrol,这个usercontrol有一个windowsformhost,我想用wpf上下文菜单处理windows控件的右键上下文菜单。

所以我向wpf用户控件发送一条消息,调用contextMenu.IsOpen = true,然后填充contextMenu.ItemsSourceProperty一个绑定。但是当我调用contextmenu.IsOpen = true,contextMenu.Items.Count == 0时,我该如何解决这个问题呢?

这是我的代码:

<UserControl x:Class="ControlEase.Inspec.Drawing.CanvasEditorView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:ControlEase.Inspec.Drawing"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
    <Style TargetType="{x:Type MenuItem}">
        <Setter Property="Header" Value="{Binding Name}"/>
        <Setter Property="Command" Value="{Binding Command}"/>
    </Style>
    <ContextMenu x:Key="graphicsMenu" ItemsSource="{Binding Commands}"/>
</UserControl.Resources>
<UserControl.ContextMenu>
    <ContextMenu ContextMenu="{StaticResource graphicsMenu}"/>
</UserControl.ContextMenu>
<Grid>
    <local:InitializedUserControl local:LoaderHelper.InitializedCommand="{Binding OpenCommand}" >
        <WindowsFormsHost x:Name="windowsHost"  local:CanvasContainerExtensions.Canvas="{Binding Model}"/>
        <EventCommander.Mappings>
            <CommandEvent Event="GotFocus" Command="{Binding ActiveCommand}"/>
            <CommandEvent Event="LostFocus" Command="{Binding DeActiveCommand}"/>
        </EventCommander.Mappings>
    </local:InitializedUserControl>
</Grid>

当我在xaml.cs中收到消息时,我调用了ContextMenu.IsOpen = true。 ContextMenu!= null,但ContextMenu.Itmes.Count == 0,输出板中没有绑定错误。请帮忙。

1 个答案:

答案 0 :(得分:1)

在这里,您要设置ContextMenu的{​​{1}}属性:

ContextMenu

因此,您将拥有一个空的<ContextMenu ContextMenu="{StaticResource graphicsMenu}"/> 空,其自身的ContextMenu包含您需要的项目。外部上下文菜单将不会显示,因为它没有任何内容,但如果它已经完成并且渲染得足够大,您可以右键单击它以查看内部上下文菜单,这是您的菜单项将隐藏的位置。

ContextMenu资源是多余的。你可以这样:

ContextMenu