更改时自定义文本框不更新 属性

Custom TextBox not updating property when change

我有一个自定义 TextBox 控件,其中的默认值为 Tag 字符串。当 TextBox 为空时,它会在顶部显示一个 TextBlock,其中带有其他颜色并居中的 Tag 字符串。该控件几乎适用于所有场景,但我遇到了一个问题。我有一个 TexBox 在我输入时需要更新 属性 所以我认为添加 UpdateSourceTrigger=PropertyChanged 会更新属性,但是当我使用自定义样式时它不起作用,它只在默认情况下起作用所以我认为问题出在自定义样式上,但我对 xaml 太陌生了,无法弄清楚。有人可以告诉我我做错了什么吗?

<TextBox Grid.Column="2" Margin="5" Style="{StaticResource DefaultTextBox}" Tag="Sesión" Text="{Binding Sesion, UpdateSourceTrigger=PropertyChanged}" Width="100"/>
<!--Directorio TextBox-->
<Style x:Key="DefaultTextBox" TargetType="TextBox">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TextBox">
                <Border Background="#ffffff" BorderBrush="#ffacacac" BorderThickness="1" CornerRadius="0">
                    <Grid>
                        <TextBox x:Name="TextBoxPersonalizado" Background="Transparent" BorderThickness="0" VerticalContentAlignment="Center" Text="{TemplateBinding Text}"/>
                        <TextBlock Foreground="#828282" HorizontalAlignment="Center" IsHitTestVisible="False" Text="{TemplateBinding Tag}" VerticalAlignment="Center">
                            <TextBlock.Style>
                                <Style TargetType="{x:Type TextBlock}">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding Text, ElementName=TextBoxPersonalizado}" Value="">
                                            <Setter Property="Visibility" Value="Visible"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                    <Setter Property="Visibility" Value="Hidden"/>
                                </Style>
                            </TextBlock.Style>
                        </TextBlock>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

TemplateBinding仅用于一个方向。
也就是说,您需要在模板中使用 RelativeSource

Text="{Binding Text, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}" 

然后你就可以像这样使用自定义的TextBox了。

<TextBox
    x:Name="InputTextBox"
    Grid.Column="0"
    Width="100"
    Margin="5"
    Style="{StaticResource DefaultTextBox}"
    Tag="Sesión" />

<TextBox Grid.Column="1" Text="{Binding ElementName=InputTextBox, Path=Text}" />