我有一個自定義 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>
uj5u.com熱心網友回復:
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}" />
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/453555.html
上一篇:如何在ObservableCollection<MyClass>中系結List<KeyValuePair<MyClass2,int>>?
