Динамически создавать вкладку и вставлять в нее представление - PullRequest
1 голос
/ 14 сентября 2011

Я использую AvalonDock, чтобы иметь стиль стыковки vs-like, и я использую призму для внедрения видов в мое приложение.
По сути, у пользователя будет боковая панель с одной кнопкой для каждого загружаемого вида, и каждый раз, когда он нажимает одну, я хочу создать новую вкладку на панели документов моего AvalonDock и вставить в нее правильный вид.

Теперь у меня сложилось впечатление, что призма хороша для такого сценария, но я не могу понять это.

Кроме того, я наткнулся на адаптеры региона DocumentPane и DockablePane от Markus Raufer , добавил его в свой проект и зарегистрировал сопоставления в загрузчике.
Это позволяет мне скомпилировать решение (поэтому я предполагаю, что я близко).

Пока я делаю это:

В моем Shell есть место с:

<avadock:DocumentPane avadock:ResizingPanel.ResizeWidth="500" Background="Transparent"
                      prism:RegionManager.RegionName="{x:Static inf:RegionNames.MainTabControlRegion}">
</avadock:DocumentPane>

В моем коде, после начальной загрузки и т. Д. У меня есть место, которое делает:

m_RegionManager.Regions[RegionNames.MainTabControlRegion].Add(oneOfMyUserControls);

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

Кроме того, когда я помещаю обычный ContentControl, пометьте его prism:RegionManager.RegionName="{x:Static inf:RegionNames.MainTabControlRegion}, затем добавьте в него UserControl точно так же, как я добавляю его в DocumentPane AvalonDock, он работает. причудливо

Что я делаю не так?
Спасибо,

баб.

EDIT:
Если определить MainTabControlRegion следующим образом, первое представление фактически добавляется, теперь я добавляю другое (другое UserControl), которое не отображается, но инспектор WPF говорит, что оно есть.
С моей точки зрения, это действительно добавление UserControls в регион, но он не знает, как создать новую вкладку для каждого UserControl, который я добавляю в DocumentPane.
Поскольку я ничего не уточняю, возможно, мне не хватает фрагмента кода?

<avadock:DocumentPane avadock:ResizingPanel.ResizeWidth="500" Background="Transparent">
    <avadock:DocumentContent Title="" prism:RegionManager.RegionName="{x:Static inf:RegionNames.MainTabControlRegion}">

    </avadock:DocumentContent>
</avadock:DocumentPane>

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

РЕДАКТИРОВАТЬ 2: Решение -> Здесь

1 Ответ

2 голосов
/ 14 сентября 2011

Эта проблема может быть вызвана многими причинами.

Или RegionAdapter не подходит для пользовательских элементов управления, которые вы пытаетесь добавить, поэтому я рекомендую вам взглянуть на реализацию RegionAdapter чтобы вы могли лучше понять, как он адаптирует ваше представление в регионе и настроить его в соответствии с вашими потребностями.

Или добавляемый вами пользовательский элемент управления имеет определенное поведение и вызывает ошибку RegionAdapter, когдаон пытается добавить ваше представление к элементам DocumentPane.Поэтому вы можете настроить RegionAdapter или исправить поведение пользовательского элемента управления.

Или это просто проблема с привязкой данных.Тот факт, что при первом исполнении ничего не появляется, странный.Попробуйте проверить свой объект DocumentPane Binding с помощью WPF Inspector .Это несколько раз спасло мне жизнь при работе с пользовательскими адаптерами RegionAdader.

...