Das Konventionen-System von Caliburn ist nur für WPF-Steuerelemente konfiguriert, die sofort einsatzbereit sind. Wenn es das RabTabControl sieht, erkennt es es nicht, also suchte es seine Klassenhierarchie nach etwas, das es erkennt. In diesem Fall stimmt es wahrscheinlich mit Selector oder ItemsControl überein. Aus diesem Grund werden Konventionen teilweise angewendet. Um genau das zu bekommen, was Sie wollen, müssen Sie dem ConventionManager für RadTabControl eine Konvention hinzufügen, die genau das macht, was Sie wollen. Hier ist, wie die TabControl Konvention definiert:
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);
};
Ich denke, Sie sollten den Code zu nehmen und mit ein paar kleinen Änderungen der Lage sein, es zu tun, was Sie wollen. Beachten Sie, dass einige der im obigen Code genannten Methoden tatsächlich im ConventionManager vorhanden sind. Daher müssen Sie dies beheben. Sie sollten Ihre Konvention in der Override-Konfiguration des Bootstrappers hinzufügen. Ein weiteres Beispiel hierfür ist der Bootstrapper der WP7-Vorlage, der benutzerdefinierte Konventionen für Pivot und Panarama definiert.
Dieser der Trick. Vielen Dank. – Dan