Wenn ich richtig verstehe, wollen Sie den Text setzen für VisualBrush
, die im TextBox
angezeigt werden.
Sie können es wie folgt tun:
<TextBox Name="MyTextBox" Tag="MyNewValue" Width="100" Height="25">
<TextBox.Background>
<VisualBrush AlignmentX="Left" AlignmentY="Center" Stretch="None">
<VisualBrush.Visual>
<Label Content="{Binding RelativeSource={RelativeSource AncestorType=TextBox}, Path=Tag}" Foreground="LightGray" />
</VisualBrush.Visual>
</VisualBrush>
</TextBox.Background>
</TextBox>
Um zu erklären, warum Ihr Beispiel nicht verdient:
1.
Wie Sie wahrscheinlich verstehen, an meinem Beispiel suchen, RelativeSource
sein darf nicht Selbst, in diesem Fall wird es auf sich selbst zeigen (VisualBrush
), und das Element mit dem Typ muss von TextBox
sein, höher im visuellen Baum.
2.
mit RelativeSource
Bindung funktioniert nicht in Ressourcen, weil die Resource
nicht Teil der visuellen Struktur ist, oder ein Teil der Vorlage.
3.
In Stile dieser Konstruktion wird nicht funktionieren, weil die Style
nur die Sammlung von Setter ist er über die Kontrolle nicht wissen, gibt es. Zu diesem Zweck wird üblicherweise DataTemplate
oder ControlTemplate
verwendet.
Als Alternative, in diesem Fall, empfehle ich eine Vorlage für die TextBox
, die VisualBrush
registriert werden wird.
Unten ist mein Beispiel:
<Window.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="KeyboardNavigation.TabNavigation" Value="None" />
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="MinWidth" Value="120" />
<Setter Property="MinHeight" Value="20" />
<Setter Property="AllowDrop" Value="true" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBoxBase}">
<Border Name="Border" CornerRadius="0" Padding="2" BorderThickness="1" BorderBrush="Black">
<Border.Background>
<VisualBrush AlignmentX="Left" AlignmentY="Center" Stretch="None">
<VisualBrush.Visual>
<Label Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Tag}"
Foreground="LightGray" />
</VisualBrush.Visual>
</VisualBrush>
</Border.Background>
<ScrollViewer Margin="0" x:Name="PART_ContentHost" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<TextBox Name="MyTextBox" Tag="MyNewValue" Width="100" Height="25" />
</Grid>
Output
![enter image description here](https://i.stack.imgur.com/R6CqU.png)