Система условных обозначений 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);
};
Я думаю, что вы должны быть в состоянии взять код и с небольшими изменениями, сделать это делать то, что вы хотите. Обратите внимание, что некоторые из методов, вызываемых в приведенном выше коде, действительно существуют в консорциуме, поэтому вам нужно будет исправить это. Вы должны добавить свое соглашение в настройку перенастройки Bootstrapper. Для получения дополнительной выборки, посмотрите на Bootstrapper шаблона WP7, который определяет пользовательские соглашения для Pivot и Panarama.
Это сделало трюк. Большое спасибо. – Dan