【问题标题】:ContextMenu ItemsSource binding problemContextMenu ItemsSource 绑定问题
【发布时间】:2011-09-23 15:28:56
【问题描述】:

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

所以我向 wpf 用户控件发送一条消息以调用 contextMenu.IsOpen = true,并为 contextMenu.ItemsSourceProperty 填充一个绑定。但是当我调用 contextmenu.IsOpen = true, The 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,并且输出板中没有绑定错误。请帮忙。

【问题讨论】:

    标签: wpf binding mvvm contextmenu itemssource


    【解决方案1】:

    在这里,您正在设置ContextMenuContextMenu 属性:

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

    因此,您将拥有一个空的外部ContextMenu,并有一个自己的ContextMenu,其中包含您需要的项目。外部上下文菜单永远不会显示,因为它没有任何内容,但如果它显示了并且渲染得足够大,您可以右键单击它以查看内部上下文菜单,这是您的菜单项将隐藏的地方。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      • 1970-01-01
      • 2020-12-22
      • 2011-07-25
      • 2020-07-12
      相关资源
      最近更新 更多