将 ControlTemplate 子项绑定到自定义控件上的 DependencyProperty 不起作用

Binding ControlTemplate child to DependencyProperty on a custom control not working

我的用户控件如下所示:

    <UserControl.Resources>
    <Style TargetType="TextBox" x:Key="ExtendeTextBoxStyle">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TextBox">
                    <Grid>

                        <TextBlock Grid.Row="3" Text="{Binding ErrorMessage, RelativeSource={RelativeSource TemplatedParent}}"  x:Name="ErrorMessage" Foreground="Red" ></TextBlock>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</UserControl.Resources>
<Grid>
    <TextBox x:Name="textbox"   Style="{StaticResource ExtendeTextBoxStyle}" ></TextBox>
</Grid>

代码隐藏

 public string ErrorMessage
    {
        get { return (string)GetValue(ErrorMessageProperty); }
        set { SetValue(ErrorMessageProperty, value); }
    }

    // Using a DependencyProperty as the backing store for ErrorMessage.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty ErrorMessageProperty =
        DependencyProperty.Register("ErrorMessage", typeof(string), typeof(CustomControl), new PropertyMetadata("x"));

现在在我的主页中,我正尝试像这样传递 ErrorMessage 的值

 <local:CustomControl ErrorMessage="My Error message"></local:CustomControl>

我觉得一切都很好,但 ErrorMessage 值没有显示。我在这里错过了什么?

我的完整申请可以here检查。

RelativeSource TemplatedParent 是错误的,因为 ErrorMessage 不是模板化文本框的 属性。

像这样使用 ElementName 绑定

<UserControl x:Name="self" ...>

<TextBlock Text="{Binding ErrorMessage, ElementName=self}" .../>

通常 ControlTemplate 中的绑定是像

这样的模板绑定
<TextBlock Text="{TemplateBinding Text}" .../>

您可以将样式文本框的文本 属性 设置为

<TextBox Style="{StaticResource ExtendeTextBoxStyle}"
         Text="{Binding ErrorMessage, ElementName=self}" .../>