2013-03-27 62 views
5

我有一个自定义样式的Combobox工作正常。它放置在一个用户控件中并绑定到一个数据结构。我使用DisplayMemberPath在Combobox文本框中只显示一个元素。组合框样式取自MSDN并多次使用。所以它不显示在这里。wpf调试错误输出System.WIndows.Data错误25

<UserControl x:Class="wpf.projext1.MyComboBox" 
     x:Name="MyControl" 
     ... 
    <ComboBox Style="{StaticResource ComboBoxStyle}" 
        Text="{Binding ElementName=MyControl, Path=Text}" 
        IsEditable="True" 
        IsTextSearchEnabled="False" 
        StaysOpenOnEdit="True" 
        ItemsSource="{Binding ElementName=MyControl, Path=MyItemsSource}" 
        DisplayMemberPath="Name" 
    </ComboBox 

我得到以下恼人的错误信息填充输出窗口:

System.Windows.Data Error: 25 : Both 'ContentTemplate' and 'ContentTemplateSelector' are set; 'ContentTemplateSelector' will be ignored. ComboBoxItem:'ComboBoxItem' (Name='') 

,如果我离开了

DisplayMemberPath="Name" 

...显示有关错误25没有调试输出。但我绝对需要DiplayMemberPath =“名称”! 你有想法解决这个问题吗?

+0

在你的Style'ComboBoxStyle'中,你可能会为你设置ItemTemplate组合框。因此,这个错误。 – 2013-03-27 09:24:38

回答

7

解决方法:使用TextSearch附加属性,无论TextSearch是否启用!

TextSearch.TextPath="Name" 
+0

很好的解决方法。在这里工作很好:) – 2013-05-07 09:10:29

11

您不能同时设置DisplayMemberPathItemTemplate

DisplayMemberPath用于告诉ItemsControl在显示对象时显示哪个属性。如果您已经通过自定义ItemTemplate,则自动设置此字段,因为您可以选择如何在该ItemTemplate中显示对象。

由于MSDN中的默认组合框样式也设置了ItemTemplate,因此这可能是导致错误的原因。

+0

我有一个itemtemplate用于显示ComboboxItems。它也应该用来显示编辑框的内容? – deafjeff 2013-03-27 09:37:33

+0

当我设置DisplayMemebrPath时,组合框就像它应该那样工作。当我离开它时,编辑框显示默认的(classname)字符串。设置DisplaymemebrPath确实有用,为ComboboxItems设置Itemtemplate。那么你能解释一下怎么把它放在一起,就像你建议的那样? – deafjeff 2013-03-27 09:43:33

+0

我必须补充一点,编辑框不会像Itemtemplate中定义的那样显示ComboboxItem。它确实显示“姓名”成员。 ItemTemplate为每个项目显示“名称”,“年龄”,“地址”等。 – deafjeff 2013-03-27 09:46:12