Caliburn'un sözleşmeler sistemi yalnızca kutunun dışında olan WPF denetimleri için yapılandırılmıştır. RabTabControl'ü gördüğünde, onu tanımaz, böylece sınıf hiyerarşisini tanımakta olduğu bir şeyi aramaktadır. Bu durumda, muhtemelen Selector veya ItemsControl üzerinde eşleşir. Bu nedenle, kısmi sözleşmelerin uygulanması vardır. Tam olarak ne istediğinizi elde etmek için, tam olarak istediğiniz şeyi yapan RadTabControl için ConventionManager'a bir sözleşme eklemeniz gerekir. İşte TabControl kongre nasıl tanımlandığını geçerli:
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);
};
Sana kodu almak mümkün olması gerektiğini düşünüyorum ve birkaç küçük değişikliklerle, bu ne istersen yap olun. Yukarıdaki kodda aranan yöntemlerin bir kısmının, gerçekten de ConventionManager'da bulunduğunu unutmayın, bu yüzden düzeltmeniz gerekecek. Sözleşmenizi Bootstrapper'ın Yapılandırması geçersiz kılma işlemine eklemelisiniz. Bunun ek bir örneği için, Pivot ve Panarama için özel kurallar tanımlayan WP7 şablonunun Bootstrapper'ına bakın.
Bu hile yaptı. Çok teşekkür ederim. – Dan