在我的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 TextBox,
<Label Content="Test" Foreground="LightGray" />
如果它是空的,测试将显示在我的TextBox中。当我尝试在不同的TextBoxes中使用此样式时,
<Label Content="{DynamicResource EmptyText}" Foreground="LightGray" />
和
<TextBox.Resources>
<sys:String x:Key="EmptyText">Test</sys:String>
</TextBox.Resources>
它没有显示任何内容。是否可以将此1样式与TextBox中显示的不同字符串一起使用,或者是否必须为每个TextBox创建不同的样式?
答案 0 :(得分:0)
您似乎没有在您提供的任何示例中使用此样式,并且完全不清楚您的上一个XAML块与之前的XAML块之间的关系。
但是,是的,您应该可以根据需要重新定义EmptyText
。 Text
属性将根据Dependency Property value precedence规则进行解析。
所以你可以这样做:
<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>