WPF:无法使用FindName访问ComboBox的TextBox

时间:2015-12-14 12:07:41

标签: wpf combobox textbox null

我看到我可以通过ComboBox方法访问TextBoxPopUpButtonFindName)的模板部分。

TextBox应该可以使用cb.FindName("PART_EditableTextBox")访问,但是,这总是会为我返回null

根据melya的建议,我尝试使用cb.Template.FindName("PART_EditableTextBox", cb);代替 - 这适用于一个简单的测试应用,但不适用于我自己。

差异可能是我在ComboBox加载或初始化之前尝试这样做(我正在开发Attached Property,为{{1}添加功能}})。

TextBoxes/ComboBoxes显示为cb.ItemTemplate

不幸的是,尝试null的明显解决方案会返回cb.ApplyTemplate()并且无法执行任何操作。

我能做些什么吗?

2 个答案:

答案 0 :(得分:2)

我知道我在这里参加派对已经很晚了,但我想我会回答,以防其他人在这里结束,就像我一样。

就我而言,我正在开发一个自定义的ComboBox控件。我遵循其他建议在Loaded事件中处理这个,但是(像OP一样),一直得到null返回。最终,我发现Loaded太早了。我的控件显示在一个最初未显示的选项卡上。

相反,重写OnApplyTemplate对我来说更合适,因为这是在Loaded事件之后(当模板可用时)。我使用的代码如下:

public override void OnApplyTemplate()
{
    base.OnApplyTemplate();
    var textBox = Template.FindName("PART_EditableTextBox", this) as TextBox;
}

答案 1 :(得分:1)

试试这种方式

cb.Template.FindName("PART_EditableTextBox", cb);