【问题标题】:Why does the Combobox.FindName() method always return null?为什么 Combobox.FindName() 方法总是返回 null?
【发布时间】:2014-01-31 09:51:37
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    如果元素有子元素,则所有子元素都递归搜索请求的命名元素。

    FindName 在当前元素的名称范围内运行。详情请见WPF XAML Namescopes

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

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

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

    或者如果你的收藏品只是strings,像这样:

    cbCategory.SelectedItem = "DefaultChatSubject";
    

    【讨论】:

      【解决方案2】:

      FindName 用于查找 FrameworkElement 的命名子元素。它在 ItemsControl 的 Items 集合中找不到项目字符串(如您的 ComboBox)。

      您可以简单地调用它:

      cbCategory.SelectedItem = "DefaultChatSubject";
      

      【讨论】:

        猜你喜欢
        • 2011-12-08
        • 1970-01-01
        • 1970-01-01
        • 2014-09-12
        • 2019-09-18
        • 2014-09-02
        • 2015-02-27
        • 2021-01-10
        • 1970-01-01
        相关资源
        最近更新 更多