Хорошо ... это меня озадачило.Я переопределил OnContentTemplateChanged в своем UserControl.Я проверяю, что значение, переданное для newContentTemplate, на самом деле равно this.ContentTemplate (так оно и есть), но когда я его вызываю ...
var textBox = this.ContentTemplate.FindName("EditTextBox", this);
... выдает следующее исключение ...
"Эта операция действительна только для элементов, к которым применен этот шаблон."
В комментарии к другому связанному вопросу он сказал, что вы должны пройтипредъявитель содержимого для элемента управления, а не сам элемент управления, поэтому я попробовал это ...
var cp = FindVisualChild<ContentPresenter>(this);
var textBox = this.ContentTemplate.FindName("EditTextBox", cp);
, где FindVisualChild - это просто вспомогательная функция, используемая в примере MSDN (см. ниже) для поиска связанного предъявителя содержимого,В то время как 'cp' найден, он также выдает ту же ошибку.Я в тупике !!
Вот вспомогательная функция для справки ...
private childItem FindVisualChild<childItem>(DependencyObject obj)
where childItem : DependencyObject
{
for(int i = 0 ; i < VisualTreeHelper.GetChildrenCount(obj) ; i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if(child != null && child is childItem)
return (childItem)child;
else
{
childItem childOfChild = FindVisualChild<childItem>(child);
if(childOfChild != null)
return childOfChild;
}
}
return null;
}
M