我希望我的文本框根据验证状态将特定文本显示为工具提示。要做到这一点,我目前使用下面的代码和它的作品:带工具提示的Wpf TextBox样式
<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派生?我想知道在这种情况下是否可以使用附加属性,但我不知道它们是如何工作的。
在此先感谢。
感谢您的回复,我不能在风格结合的工作,我已经试过'<二传手Property =“ToolTip”Value =“{Binding RelativeSource = {RelativeSource Self},Path =(local:ToolTipHelper.ToolTip),Mode = OneTime}”/>'但我得到错误“属性路径无效。 'ToolTipHelper'没有一个名为'ToolTip'的公共属性。“我根据[link]创建了ToolTipHelper(http://msdn.microsoft.com/en-us/library/ms753957.aspx?cs-save-lang= 1&cs-lang = csharp#code-snippet-1)。任何想法我做错了什么? – dbostream
最有可能你没有提供适当的参数给RegisterAttached方法1.没有“Property”,2 。属性值的类型3.属性的所有者类“ToolTipHelper”4.具有至少默认值的元数据 – dowhilefor
谢谢我注意到我使用了错误的所有者类,我也必须将绑定模式更改为OneWay,当我使用OneTime时,工具提示总是显示默认文本。再次感谢您的帮助。 – dbostream