Проблема связывания источника ContextMenu ItemsSource - PullRequest
0 голосов
/ 23 сентября 2011

Существует проблема с ContextMenu с wpf usercontrol. Я написал usercontrol, и у этого usercontrol есть windowsformhost, и я хочу обработать контекстное меню правой кнопки управления Windows с помощью контекстного меню wpf.

Поэтому я отправляю сообщение в пользовательский элемент управления 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 Ответ

1 голос
/ 23 сентября 2011

Здесь вы устанавливаете свойство ContextMenu для ContextMenu:

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

В результате у вас будет пустой внешний ContextMenu с ContextMenuсвой собственный, который содержит предметы, которые вам нужны.Внешнее контекстное меню никогда не будет отображаться, потому что в нем ничего нет, но если оно появилось и визуализировалось достаточно большим, вы можете щелкнуть его правой кнопкой мыши, чтобы увидеть внутреннее контекстное меню, в котором ваши элементы меню будут скрываться.

Ресурс ContextMenu является избыточным.Вы могли бы просто иметь это:

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