Caliburn.Micro和Telerik WPF控制

Dan*_*Dan 8 c# wpf xaml telerik caliburn.micro

希望你们都很好.

我正在使用Caliburn.Micro和Telerik的WPF控件来构建选项卡式界面.使用RadTabControl我有以下代码;

<telerik:RadTabControl x:Name="Items" Grid.Row="1" TabStripPlacement="Bottom">
    <telerik:RadTabControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Image Source="{Binding DisplayIcon}" Width="16" Height="16"/>
                <TextBlock Text="{Binding DisplayName}"/>
            </StackPanel>
        </DataTemplate>
    </telerik:RadTabControl.ItemTemplate>
</telerik:RadTabControl>
Run Code Online (Sandbox Code Playgroud)

该选项卡具有正确的标题,但内容为".../MyViewModel"(省略号替换完整路径),而不是应显示的屏幕.

如果我<telerik:RadTabControl...<TabControl...这个替换所有的工作按预期.

我错过了什么?

Eis*_*ect 12

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);
};
Run Code Online (Sandbox Code Playgroud)

我认为你应该能够采取代码并进行一些小的修改,让它做你想做的.请注意,上面代码中调用的某些方法实际上存在于ConventionManager中,因此您需要修复它.您应该在Bootstrapper的配置覆盖中添加您的约定.有关其他示例,请查看WP7模板的Bootstrapper,它定义了Pivot和Panarama的自定义约定.