Я пытаюсь создать общее меню между чем-то в верхней строке меню моего приложения и контекстным меню правой кнопкой мыши в моем интерфейсе в WPF. Я гуглил aroudn, но я не могу понять, как hwo поделиться ТОЛЬКО списком пунктов меню.
Вот изображение пользовательского интерфейса, чтобы помочь описать его:
То, как это работает, когда выбран элемент в списке (как показано на заднем плане), это меню становится доступным для использования. Я хотел бы сделать так, чтобы при нажатии правой кнопкой мыши на элемент в списке, он также отображал то же меню. Я хотел бы избежать дублирования кода, поэтому я определил ресурс для MenuItem в моих ресурсах окна:
<MenuItem x:Key="modUtilsMenu">
<MenuItem Header="{Binding SelectedMod.ModName}" IsEnabled="False" FontWeight="Bold" />
<MenuItem Header="{DynamicResource string_Checkforupdates}" Command="{Binding SelectedModCheckForUpdatesCommand}" ToolTip="{DynamicResource string_tooltip_checksForUpdatesToThisMod}" >
<MenuItem.Icon>
<fa:ImageAwesome Style="{StaticResource EnableDisableImageStyle}" Icon="Cloud" Foreground="{DynamicResource {x:Static adonisUi:Brushes.ForegroundBrush}}" Height="16" Width="16"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="{DynamicResource string_RestoremodfromME3Tweaks}" Command="{Binding RestoreModFromME3TweaksCommand}" ToolTip="{DynamicResource string_tooltip_forcesUpdateCheck}" >
<MenuItem.Icon>
<fa:ImageAwesome Style="{StaticResource EnableDisableImageStyle}" Icon="CloudDownload" Foreground="{DynamicResource {x:Static adonisUi:Brushes.ForegroundBrush}}" Height="16" Width="16" RenderOptions.BitmapScalingMode="HighQuality"/>
</MenuItem.Icon>
</MenuItem>
...
Затем я добавляю его в интерфейс как подэлемент элемента меню Mod Utils:
<MenuItem Header="{DynamicResource string_ModUtils}" Padding="4" IsEnabled="{Binding SelectedMod, Converter={StaticResource NullEnabledConverter}}">
<StaticResource ResourceKey="modUtilsMenu"/>
</MenuItem>
Очевидно, что это не работает, поскольку в ресурсе определен второй элемент MenuItem.
Однако я не уверен, как Я могу сохранить «список» пунктов меню для добавления в качестве дочерних элементов другого объекта, поскольку контейнерные элементы root в MenuItem и ContextMenu не совпадают. Это все пункты меню, основанные на командах. У меня будет та же проблема с контекстным меню - как я могу поделиться только содержимым, а не контейнером? Нужно ли выполнять привязку данных?
Я смотрел на Как разделить определение меню между контекстным меню и обычным меню в WPF , но это, кажется, только для одного Пункты меню. Я полагаю, я мог бы сделать это для каждого из них, но я смотрю, есть ли способ сделать это, где мне нужно обновить его только в одном месте вместо трех, чтобы заставить его работать.