我看到我可以通过ComboBox
方法访问TextBox
(PopUp
,Button
和FindName
)的模板部分。
TextBox
应该可以使用cb.FindName("PART_EditableTextBox")
访问,但是,这总是会为我返回null
。
根据melya的建议,我尝试使用cb.Template.FindName("PART_EditableTextBox", cb);
代替 - 这适用于一个简单的测试应用,但不适用于我自己。
差异可能是我在ComboBox
加载或初始化之前尝试这样做(我正在开发Attached Property
,为{{1}添加功能}})。
TextBoxes/ComboBoxes
显示为cb.ItemTemplate
。
不幸的是,尝试null
的明显解决方案会返回cb.ApplyTemplate()
并且无法执行任何操作。
我能做些什么吗?
答案 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);