Система условных обозначений Caliburn настроена только на готовые элементы управления WPF.Когда он видит RabTabControl, он не распознает его, поэтому он искал иерархию классов в поисках чего-то, что он распознает.В этом случае он, вероятно, совпадает либо с Selector, либо с ItemsControl.Вот почему существует частичное применение соглашений.Чтобы получить именно то, что вы хотите, вам нужно добавить в ConventionManager для RadTabControl соглашение, которое делает именно то, что вы хотите.Вот как определяется соглашение TabControl:
AddElementConvention<TabControl>(TabControl.ItemsSourceProperty, "ItemsSource", "SelectionChanged")
.ApplyBinding = (viewModelType, path, property, element, convention) => {
if(!SetBinding(viewModelType, path, property, element, convention))
return;
var tabControl = (TabControl)element;
if(tabControl.ContentTemplate == null && tabControl.ContentTemplateSelector == null && property.PropertyType.IsGenericType) {
var itemType = property.PropertyType.GetGenericArguments().First();
if(!itemType.IsValueType && !typeof(string).IsAssignableFrom(itemType))
tabControl.ContentTemplate = DefaultItemTemplate;
}
ConfigureSelectedItem(element, Selector.SelectedItemProperty, viewModelType, path);
if(string.IsNullOrEmpty(tabControl.DisplayMemberPath))
ApplyHeaderTemplate(tabControl, TabControl.ItemTemplateProperty, viewModelType);
};
Я думаю, что вы сможете взять код и с небольшими изменениями заставить его делать то, что вы хотите.Обратите внимание, что некоторые методы, вызываемые в приведенном выше коде, действительно существуют в ConventionManager, поэтому вам нужно это исправить.Вы должны добавить свое соглашение в переопределение Configure вашего Bootstrapper.Для дополнительного примера этого взгляните на Bootstrapper шаблона WP7, который определяет пользовательские соглашения для Pivot и Panarama.