在我的 Window.Resources 中,我有以下风格:
<Style TargetType="TextBox" x:Key="HintText" xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Style.Resources>
<VisualBrush x:Key="CueBannerBrush" AlignmentX="Left" AlignmentY="Center" Stretch="None">
<VisualBrush.Visual>
<Label Content="{DynamicResource EmptyText}" Foreground="LightGray" />
</VisualBrush.Visual>
</VisualBrush>
</Style.Resources>
<Style.Triggers>
<Trigger Property="Text" Value="{x:Static sys:String.Empty}">
<Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
</Trigger>
<Trigger Property="Text" Value="{x:Null}">
<Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
</Trigger>
<Trigger Property="IsKeyboardFocused" Value="True">
<Setter Property="Background" Value="White" />
</Trigger>
</Style.Triggers>
</Style>
如果我用这个将它用于 1 个文本框,
<Label Content="Test" Foreground="LightGray" />
如果测试为空,它将显示在我的文本框中。当我尝试在不同的文本框中使用此样式时,
<Label Content="{DynamicResource EmptyText}" Foreground="LightGray" />
和
<TextBox.Resources>
<sys:String x:Key="EmptyText">Test</sys:String>
</TextBox.Resources>
它没有显示任何内容。是否可以将此 1 样式与文本框中显示的不同字符串一起使用,还是必须为每个文本框制作不同的样式?
你似乎没有在你给出的任何示例中使用这种样式,并且根本不清楚你的最后一个 XAML 块与它前面的 XAML 块有什么关系。
但是,是的,您应该能够根据需要随时重新定义EmptyText
。Text
属性将根据依赖项属性值优先级规则进行解析。
所以你可以做这样的事情:
<DockPanel HorizontalAlignment="Stretch">
<DockPanel.Resources>
<Style TargetType="TextBlock">
<Setter Property="Text"
Value="{DynamicResource EmptyText/>
</Style>
<sys:String x:Key="EmptyText">Defined in the Dockpanel resource</sys:String>
</DockPanel.Resources>
<TextBlock/>
<TextBlock>
<TextBlock.Resources>
<sys:String x:Key="EmptyText">Defined in the textbox resource</sys:String>
</TextBlock.Resources>
</TextBlock>
<TextBlock>
<TextBlock.Resources>
<sys:String x:Key="EmptyText">Also defined at the textbox</sys:String>
</TextBlock.Resources>
</TextBlock>
</DockPanel>