Программно добавить LayoutAnchorable в DockManager

Я пытаюсь программно добавить новый LayoutAnchorable в мой экземпляр AvalonDock DockingManager.

Используя приведенный ниже код, появляется привязка, но она пустая (содержимое не отображается), а кнопки не работают (плавающие, автоскрытие, закрытие и т. д.).

Элемент управления действительно начинает работать должным образом после перетаскивания его (во время выполнения) в мой LayoutDocumentPane и из него, хотя кнопка закрытия не появляется (это отдельная проблема).

var anchorable = new LayoutAnchorable
{
    Content = control,
    Title = "Configuration",
    ContentId = "ConfigurationId",
    IsActive = true,
    IsSelected = true,
    CanFloat = true,
    CanAutoHide = false,
    CanClose = true,
    CanHide = false,
};

anchorable.AddToLayout( DockingManager, AnchorableShowStrategy.Left );

Я пробовал перемещаться по исходному коду AvalonDock, но не нашел ничего очевидного.

Я хотел бы, чтобы это добавлялось программно, а не с использованием MVVM.


person Rich    schedule 15.05.2014    source источник
comment
какую версию авалондока вы используете? 1.3 или 2.0?   -  person Xavier Guzman    schedule 15.05.2014
comment
Я использую версию 2.0.   -  person Rich    schedule 15.05.2014
comment
У меня была проблема, из-за которой, если у моего диспетчера стыковки не было панелей на xaml, он просто не отображал панели вообще (также добавлялся во время выполнения). Что я сделал, так это добавил заполнители в xaml и удалил их при запуске приложения, похоже, это как-то помогло   -  person Xavier Guzman    schedule 15.05.2014
comment
Ах хорошо. К сожалению, я уже указал LayoutPanel.   -  person Rich    schedule 15.05.2014
comment
Я сталкиваюсь с тем же. Вы нашли ответ?   -  person Jeremy    schedule 21.09.2015
comment
Прошу прощения, но нет. Без понятия.   -  person Rich    schedule 21.09.2015


Ответы (1)


Если вы хотите всегда добавлять в ту же область документа, из которого вы добавляете, вы можете сделать это. HomePage.homepage — это статический элемент окна, содержащего диспетчер стыковки. doc — ссылка на текущий документ.

LayoutDocument ld = new LayoutDocument();
ld.Content = new NewDonor(ld);
LayoutDocumentPane pane =  ((doc.FindParent<LayoutDocumentPane>() ?? (HomePage.homepage.panal.Children?[0] as LayoutDocumentPane)) ?? new LayoutDocumentPane());
pane.Children.Add(ld);
if (HomePage.homepage.panal.ChildrenCount == 0)
{
    HomePage.homepage.panal.Children.Add(pane);
}
ld.IsSelected = true;
person Shloime Rosenblum    schedule 29.04.2018