在ContentControl中从视图的代码后面到达控件

时间:2017-06-06 06:38:59

标签: xaml uwp

我的观点的XAML仅包含自定义控件。

再进一步,在资源字典中,我有一个这个自定义控件的样式,在这里,我有一个TextBox。我的目标是从后面的视图代码中获取此TextBox,并在视图的DataContext更改时设置它的焦点。

我尝试使用x:Name为视图的XAML上的自定义控件命名,并在控件的样式中为TextBox命名(所以基本上试图触及它从后面的代码:this.MyCustomControl.SearchTextBox)。这没用。

解决此问题的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

这就是我要做的。

  1. TemplatePart的自定义控件上创建TextBox属性。

    [TemplatePart(Name = "YourTextBoxName", Type = typeof(TextBox))]

  2. 然后在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");
    
  3. 然后,您只需创建一个公共方法SetFocus,您的代码可以访问。

    public void SetFocus() => _textBox.Focus(FocusState.Programmatic);

答案 1 :(得分:0)

尝试使用visual tree helper

            VisualTreeHelper.GetChild(object, index)

msdn link