我希望我的文本框根據驗證狀態將特定文本顯示爲工具提示。要做到這一點,我目前使用下面的代碼和它的作品:帶工具提示的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