ContentControl 显示的内容与所需图标不同(System.Windows.DataTemplates)

Different Content (System.Windows.DataTemplates) displayed by ContentControl rather than required Icon

我正在开发一个组合框,其中 icons.This 组合框由具有名称的项目和其所属类型的图标组成。

虽然我的尝试在一定程度上取得了成功,但我得到了一个字符串,上面写着 "System.Windows.DataTemplate" 它应该显示相应图标的位置。

我觉得调用内容控制器的方式有问题。

您应该使用 DataTemplate 资源来设置 ContentTemplate 属性,而不是 Content

<ContentControl Content="{Binding}">
    <ContentControl.Style>
        <Style TargetType="{x:Type ContentControl}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type dc:ComboBoxItem}}, Path=DataContext, Converter={StaticResource FormBuilderClient_TypeOfConverter}}" Value="{x:Type models:FileSettingsModel}" >
                    <Setter Property="ContentTemplate" Value="{StaticResource FileIcon}" />
                </DataTrigger>

                <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type dc:ComboBoxItem}}, Path=DataContext, Converter={StaticResource FormBuilderClient_TypeOfConverter}}" Value="{x:Type models:ServerSettingsModel}" >
                    <Setter Property="ContentTemplate" Value="{StaticResource ServerIcon}" />
                </DataTrigger>

                <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type dc:ComboBoxItem}}, Path=DataContext, Converter={StaticResource FormBuilderClient_TypeOfConverter}}" Value="{x:Type models:HomeSettingsModel}" >
                    <Setter Property="ContentTemplate" Value="{StaticResource HomeIcon}" />
                </DataTrigger>

            </Style.Triggers>
        </Style>
    </ContentControl.Style>

</ContentControl>

然而,对于特定类型使用 DataTemplates 应该比 x:Key 更简单。也在 ComboBox 资源中定义它们。

<ComboBox.Resources >

    <DataTemplate DataType="{x:Type models:FileSettingsModel}">
        <Path Stretch="Uniform" Stroke="Black" Fill="Blue" Height="15" Width="25" Data="..."/>
    </DataTemplate>

    <DataTemplate DataType="{x:Type models:ServerSettingsModel}" >
        <Path Stretch="Uniform" Stroke="Black"  Fill="OrangeRed" Height="15" Width="25" Data="..."/>
    </DataTemplate>

    <DataTemplate DataType="{x:Type models:HomeSettingsModel}">
        <Canvas>
            <Path  Canvas.Top="0" Canvas.Left="-2" Height="15" Width="25"
   Stretch="Uniform" Stroke="Black" Fill="Green" Data="..."/>

            <Path Canvas.Top="7" Canvas.Left="9" Height="16" Width="23" 
  Stretch="Uniform" Stroke="Black" Fill="Yellow" Data="..."/>
        </Canvas>
    </DataTemplate>

</ComboBox.Resources>

这样 ContentControl 应该在没有任何触发器的情况下选择正确的模板:

<ContentControl Content="{Binding}"/>