У меня есть внешний элемент управления с именем DockSite. При отображении ContextMenu из элемента управления DockSite вызывается обработчик события MenuOpening.
Я хотел добавить свой ContextMenu в ContextMenu по умолчанию при вызове события MenuOpening, и я создал присоединенное свойство, как показано ниже, чтобы расширить поведение DockSite.
public static ContextMenu GetAddDocumentMenu(DependencyObject obj)
{
return (ContextMenu)obj.GetValue(AddDocumentMenuProperty);
}
public static void SetAddDocumentMenu(DependencyObject obj, ContextMenu value)
{
obj.SetValue(AddDocumentMenuProperty, value);
}
// Using a DependencyProperty as the backing store for AddDocumentMenu. This enables animation, styling, binding, etc...
public static readonly DependencyProperty AddDocumentMenuProperty =
DependencyProperty.RegisterAttached("AddDocumentMenu", typeof(ContextMenu), typeof(DockSiteHook), new PropertyMetadata(new ContextMenu(), OnDocumentMenuChanged));
private static void OnDocumentMenuChanged(object sender, DependencyPropertyChangedEventArgs e)
{
var dockSite = (sender as DockSite);
if (dockSite == null) return;
ContextMenu on = (ContextMenu)e.NewValue;
if (on is null) dockSite.MenuOpening -= DockSite_MenuOpening;
else dockSite.MenuOpening += DockSite_MenuOpening;
}
private static void DockSite_MenuOpening(object sender, DockingMenuEventArgs e)
{
e.Menu.Items.Add(DockSiteHook.GetAddDocumentMenu(sender as DockSite));
}
Я использовал приведенный выше код в своем главном окне, как показано ниже.
<docking:DockSite Grid.Row="1" x:Name="dockSite">
<ap:DockSiteHook.AddDocumentMenu>
<ContextMenu>
<MenuItem Command="{Binding TestCommand}"/>
</ContextMenu>
</ap:DockSiteHook.AddDocumentMenu>
<docking:DockSite/>
Но Visual Studio выдает ошибку, как показано на рисунке ниже.
Сообщение об ошибке «Не удается связать значение по умолчанию для AddDocumentMenu с указанным c thread ".
Я хочу связать ContextMenu с указанным c присоединенным свойством.
Может кто-нибудь сказать мне, почему возникла ошибка выше? и как решить эту проблему?
Спасибо за чтение.