Мне не удалось получить ни одного из предложенных ответов для работы. Обширный поиск в Google тоже не помог. В течение выходных я немного размышлял над этой проблемой, и чем больше я думал об этом, тем больше мне приходило в голову, что в этом подходе есть какой-то запах кода . Вы внедряете представление в свой регион вкладок ... происходит что-то волшебное, и добавляется вкладка ... вам нужно добавить непонятное динамическое связывание с некоторыми стилями XAML, хранящимися где-то в файле, и это может или не может установить текст заголовка , Если какой-то один элемент этого будет немного ошибочным, вы не получите ошибку, но она просто не будет работать.
На мой взгляд, это и хрупко (то есть очень легко сломать) и довольно непроницаемо, если у вас нет глубокого понимания ПРИЗМЫ, модели и XAML. К счастью, есть гораздо более приятный и простой способ сделать это:
Просто создайте представление с именем TabRegionView , которое содержит только пустой TabControl. Вы, вероятно, хотите добавить это в свой Shell.xaml. Создайте событие с именем InjectTabView , которое имеет полезную нагрузку типа UserControl, и подпишитесь на это событие в элементе управления TabRegionView . Когда событие запускается в TabRegionView , вы создаете TabItem вручную и добавляете представление к TabItem следующим образом:
public void TabAdded(UserControl view)
{
var item = new TabItem();
item.Content = view;
item.IsSelected = true;
item.Header = "Header Text";
mainTab.Items.Add(item);
}
Когда вы хотите отобразить представление в виде новой вкладки, ваш код выглядит примерно так:
var view = new View(params);
_eventAggregator.GetEvent<InjectTabViewEvent>()
.Publish(view);
Это будет взято TabRegionView , и представление будет добавлено как новая вкладка. Вы можете легко обернуть View в жгут проводов какого-либо типа, который содержит текст заголовка, изображение и bool, чтобы указать, нужно ли автоматически выбирать вкладку.
ИМХО, у этой техники есть двойное преимущество: она дает вам прямой контроль над тем, что происходит, и ей намного легче следовать.
Мне было бы очень интересно узнать мнение по этому поводу у любого PRISM officianados.