Конструктор MyScrollViewer
не будет вызываться при template
создании с XamlReader
, поэтому имена , с которыми MyScrollViewer
было создано , сохраняются во внутренних словарях.Смотри template.ChildNames
.Сначала будет вызван конструктор MyScrollViewer
, когда MyTextBox
станет видимым, но уже слишком поздно.
Шаблон создается из XAML, и он замечает дочерние имена при разборе, без создания дочерних экземпляров.Позже будут созданы дочерние экземпляры, но шаблон будет содержать старые имена.Поэтому, если вы позвоните Template.FindNames
с новыми именами, они не будут найдены.
Попробуйте
var contentHost = Template.FindName("2_T", this);