我希望我的文本框根据验证状态显示特定文本作为工具提示。为此,我目前使用以下代码,它可以工作:
<TextBox Name="textBox1">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="False">
<Setter Property="ToolTip" Value="{Binding XPath=HelpText/Description, Mode=OneTime}" />
</Trigger>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}" />
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
如果没有错误,则显示从xml文件读取的描述文本,当出现错误时,将显示验证错误字符串。
问题是现在我必须复制这个样式并将其应用到每个文本框(并更改XPath,它对于每个文本框都是唯一的),我想要做的是将样式放在Window.Resources中我可以像这样在每个文本框中引用它:
<TextBox Name="textBox2" Style="{StaticResource TextBoxStyle}" />
但每个文本框的XPath都不同,所以我不能把我的风格放在Window.Resources中。如何在样式中创建特定于实例的XPath?有没有办法在不创建新文本框并从TextBox派生的情况下执行此操作?我想知道在这种情况下是否可以使用附属物,但我不知道它们是如何工作的。
提前致谢。
答案 0 :(得分:2)
我还没有对此进行过全面测试,但您可以使用附加属性 类似的东西:
class ToolTipHelper {
public static readonly DependencyProperty ToolTipProperty =
DependencyProperty.RegisterAttached("ToolTip", typeof(string) ...
然后你修改你的触发器:
<Trigger Property="Validation.HasError" Value="False">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(ToolTipHelper.ToolTip}, Mode=OneTime}" />
</Trigger>
你就像
一样使用它<TextBox ToolTipHelper.ToolTip="{Binding XPath=HelpText/Description, Mode=OneTime}" />
答案 1 :(得分:0)
您可以使用Tag Property并将您的风格更改为
<Style TargetType="{x:Type TextBox}">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=Tag}" />
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
</Trigger>
</Style.Triggers>
</Style>
然后将所需的XPath
绑定到每个特定Tag
的{{1}}属性
TextBox