2011-09-23 91 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>