C# 设置数据绑定WPF ComboBoxItem的样式时出现问题

C# 设置数据绑定WPF ComboBoxItem的样式时出现问题,c#,wpf,C#,Wpf,我有一个组合框,绑定到数据表。我试图在列表顶部添加一个额外的ComboBoxItem,在这里我可以放置一个链接来定制列表。目前,我只是在DataTable的顶部插入一个虚拟行,然后在ComboBox上使用DataTrigger使其正确显示。然而,我并没有得到正确的结果 我试过两种方法。在第一个示例中,我的DataTrigger使用包含TextBlock的ControlTemplate替换虚拟项 <ComboBox IsEditable="True" Name="comboWell" Ite

我有一个组合框,绑定到数据表。我试图在列表顶部添加一个额外的ComboBoxItem,在这里我可以放置一个链接来定制列表。目前,我只是在DataTable的顶部插入一个虚拟行,然后在ComboBox上使用DataTrigger使其正确显示。然而,我并没有得到正确的结果

我试过两种方法。在第一个示例中,我的DataTrigger使用包含TextBlock的ControlTemplate替换虚拟项

<ComboBox IsEditable="True" Name="comboWell" ItemsSource="{Binding}" DisplayMemberPath="wellId">
    <ComboBox.ItemContainerStyle>
        <Style TargetType="{x:Type ComboBoxItem}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding wellId}" Value="(settings)">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="ComboBoxItem">
                                <TextBlock Text="Customize..." />
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.ItemContainerStyle>
</ComboBox>

结果看起来不错,但该项上没有鼠标悬停突出显示。列表的其余部分工作正常,但当我将鼠标移到它上面时,这一项根本没有反应。我尝试添加额外的触发器和样式来应用鼠标悬停效果,但没有得到任何改变

我尝试的第二种方法只是改变项目的外观,而不是用ControlTemplate完全替换它

<ComboBox IsEditable="True" Name="comboWell" ItemsSource="{Binding}" DisplayMemberPath="wellId">
    <ComboBox.ItemContainerStyle>
        <Style TargetType="{x:Type ComboBoxItem}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding wellId}" Value="(settings)">
                    <Setter Property="Content" Value="Customize..." />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.ItemContainerStyle>
</ComboBox>

这一个功能类似于常规列表项,鼠标悬停工作正常。但是,该项为空。原始文本和我试图在DataTrigger中设置的文本都不存在。没有错误,只是一个空列表项


是否有更好的方法来完成此任务?

删除
DisplayMemberPath
,并将默认内容添加到样式中

<ComboBox IsEditable="True" Name="comboWell" ItemsSource="{Binding }">
    <ComboBox.ItemContainerStyle>
        <Style TargetType="{x:Type ComboBoxItem}">
            <Setter Property="Content" Value="{Binding wellId}" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding wellId}" Value="(settings)">
                    <Setter Property="Content" Value="Customize..." />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.ItemContainerStyle>
</ComboBox>

DisplayMemberPath
实际上是一种快捷方式,表示项目模板应该是一个文本块,其文本绑定到DisplayMemberPath项目,我猜它覆盖了样式中的任何内容