Когда вы получаете доступ к HeaderControl, он извлекается из ControlTemplate. Элементы в шаблоне ControlTemplate создаются и добавляются как визуальные потомки элемента управления. Затем вызывается метод OnApplyTemplate, и вы можете получить к ним доступ через их имя.
Во втором случае вы специально назначаете отдельный элемент свойству Header. В этом случае невозможно получить «именованный» элемент, так как заголовок устанавливается явно.
Вы можете напрямую привести свойство Header, если знаете, что это будет TextBlock, например:
TextBlock tb = this.Header as TextBlock;
if (tb != null)
tb.Text = Text;
В противном случае вы можете привязать TextBlock к свойству Text в вашем XAML, например:
<me:MyBaseControl.Header>
<TextBlock Name="xxx" Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type me:MyControl}}, Path=Text}" />
</me:MyBaseControl.Header>
Последний способ привязки является лучшим способом, поскольку вы не привязаны к данному элементу управления (т. Е. TextBlock).