我的观点的XAML仅包含自定义控件。
再进一步,在资源字典中,我有一个这个自定义控件的样式,在这里,我有一个TextBox。我的目标是从后面的视图代码中获取此TextBox,并在视图的DataContext更改时设置它的焦点。
我尝试使用x:Name为视图的XAML上的自定义控件命名,并在控件的样式中为TextBox命名(所以基本上试图触及它从后面的代码:this.MyCustomControl.SearchTextBox)。这没用。
解决此问题的最佳做法是什么?
答案 0 :(得分:1)
这就是我要做的。
在TemplatePart
的自定义控件上创建TextBox
属性。
[TemplatePart(Name = "YourTextBoxName", Type = typeof(TextBox))]
然后在OnApplyTemplate
覆盖方法内,获取TextBox
的参考。
// You might want to add property error handling here
// so if the TextBox is not found, throw an exception.
// Doing so forces other people will have to implement
// the SAME PART in their own stylings.
_textBox = (TextBox)GetTemplateChild("YourTextBoxName");
然后,您只需创建一个公共方法SetFocus
,您的代码可以访问。
public void SetFocus() => _textBox.Focus(FocusState.Programmatic);
答案 1 :(得分:0)