Динамически создавать вкладку и вставлять в нее представление
Я использую 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, он работает. бредовый
Что я делаю неправильно?
Спасибо,
бабы.
РЕДАКТИРОВАТЬ:
Если определить 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 ответ
Эта проблема может быть вызвана многими причинами.
Или RegionAdapter не очень подходит для пользовательских элементов управления, которые вы пытаетесь добавить, поэтому я бы порекомендовал вам взглянуть на реализацию RegionAdapter, чтобы вы могли лучше понять, как он адаптирует ваш вид в регионе и настроить его под свои требования. твои нужды.
Или пользовательский элемент управления, который вы добавляете, имеет определенное поведение и вызывает ошибку RegionAdapter, когда он пытается добавить ваше представление к элементам DocumentPane. Поэтому вы можете настроить RegionAdapter или исправить поведение пользовательского элемента управления.
Или это просто проблема привязки данных. Тот факт, что при первом исполнении ничего не появляется, довольно странный. Попробуйте проверить свой объект DocumentPane Binding с WPF Inspector. Это спасло мою жизнь не раз, когда я имел дело с пользовательскими адаптерами RegionAdapters.