2011-09-23 85 views
0

ContextMenu和wpf usercontrol存在问题。我写了一个用户控件,这个用户控件有一个windowsformhost,我想用wpf上下文菜单来处理windows控件的右键按钮contextmenu。ContextMenu ItemsSource绑定问题

所以我发送消息给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 =真。 ContextMenu!= null,但ContextMenu.Itmes.Count == 0,并且在输出板中没有绑定错误。请帮忙。

回答

1

在这里,你设置ContextMenuContextMenu属性:

<ContextMenu ContextMenu="{StaticResource graphicsMenu}"/> 

结果,你就会有一个空的外ContextMenu,用自己的ContextMenu包含您需要的项目。外部上下文菜单将不会显示,因为它没有任何内容,但如果它已经显示足够大,您可以右键单击它以查看内部上下文菜单,这是菜单项隐藏的位置。

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

<UserControl.ContextMenu> 
    <ContextMenu ItemsSource="{Binding Commands}"/> 
</UserControl.ContextMenu>