为什么Combobox.FindName()方法总是返回null?

时间:2014-01-31 09:51:38

标签: wpf c#-4.0 combobox wpf-controls

我在List对象中定义了Combobox的ItemSource。我想通过使用FindName()方法到达ComboBoxItem但它总是返回null。我在开始时尝试过ApplyTemplate(),并且我也尝试使用Combobox.Template来访问Item。这是我的代码。有什么建议?

List<string> subjectsList = e.Result;
cbCategory.ItemsSource = subjectsList;
cbCategory.SelectedItem = cbCategory.FindName("DefaultChatSubject");     

顺便说一句,我对ItemSource中的Items没有任何问题。

2 个答案:

答案 0 :(得分:2)

FrameworkTemplate.FindName Method 查找具有提供的标识符名称的元素。从MSDN上的链接页面:

  

如果元素具有子元素,则会为请求的命名元素递归搜索这些子元素。

     

FindName在当前元素的名称范围内运行。有关详细信息,请参阅WPF XAML Namescopes

为了成功使用FindName方法,您要查找的子元素必须设置其Name属性。由于数据绑定项集合不太可能设置ComboBoxItem.Name属性,因此这对您来说也不太可能。

设置所选项目的更好方法是这样的:

cbCategory.SelectedItem = subjectsList.First(i => i.Property == "DefaultChatSubject");

或者,如果您的收藏品只是string s,请执行以下操作:

cbCategory.SelectedItem = "DefaultChatSubject";

答案 1 :(得分:1)

FindName用于查找FrameworkElement的命名子元素。它没有在ItemsControl的Items集合中找到项目字符串(就像你的ComboBox一样)。

您可以简单地调用它:

cbCategory.SelectedItem = "DefaultChatSubject";