我想按照預期使用工具提示。但是當發生錯誤時,我想更改它們以顯示錯誤消息,然後當錯誤得到解決時,將它們改回。WPF爲工具提示創建附加屬性
所以我創建了一個附加的屬性來保存工具提示。我將工具提示分配給附加屬性,然後使用樣式將其複製到工具提示屬性。如果出現錯誤,則樣式會將工具提示設置爲錯誤消息。
所以設置在提示錯誤信息的觸發條件爲:
<Trigger Property="Validation.HasError"
Value="true">
<Setter Property="BorderBrush"
Value="{DynamicResource controls-errorBorderBrush}" />
<Setter Property="ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors)[0].ErrorContent}" />
</Trigger>
這似乎很容易(和作品)
當錯誤被修正,我將其設置回(這並未」將不起作用):
<Trigger Property="Validation.HasError"
Value="false">
<Setter Property="ToolTip"
Value="{Binding Path=(wpfMisc:myCtrl.tooltipValue)}" />
</Trigger>
而在XAML文件中我有:
<TextBox Text="this is a textbox with a myMisc based tooltip"
Name="txtTooltip2"
wpfMisc:myCtrl.tooltipValue="Tooltip Test tooltip" />
所以當然,這個問題很可能出現在我附加的屬性中,因爲它似乎沒有正確保存信息。下面是該代碼:
public static string GettooltipValue(DependencyObject obj)
{
string value = obj.GetValue(tooltipValueProperty).ToString() ;
value = value.trimNull() ; // extension method to insure at least an empty string
return value ;
}
public static void SettooltipValue(DependencyObject obj, string value)
{
obj.SetValue(tooltipValueProperty, value.trimNull());
}
public static readonly DependencyProperty tooltipValueProperty =
DependencyProperty.RegisterAttached("tooltipValue",
typeof(string),
typeof(myCtrl),
new UIPropertyMetadata(string.Empty));
所以我的猜測是,我需要用的東西在UIPropertyMetaData不同,但不知道我會用什麼。或者我的整個方法錯了?
我想爲所有數據字段提供特定於數據的工具提示。
我確實在錯誤期間通過將工具提示移動到標記屬性工作,但我不想讓它以這種方式工作,因爲我知道當其他代碼想要使用以某種特殊方式標記。
而且,我知道的一些代碼很冗長 - 只是調試的副作用...
而在另一myCtrl依賴屬性工作得很好,所以我知道的xmlns等引用正確。
在進一步的研究中,我在輸出窗口中發現了以下內容: System.Windows.Data錯誤:17:無法從''(type'layoutSettingsViewModel')獲取'tooltipValue'值(類型'String')。 BindingExpression:路徑=(0); DataItem ='layoutSettingsViewModel'(HashCode = 46457861);目標元素是'TextBox'(Name ='');目標屬性是'工具提示'(類型'對象')InvalidCastException:'System.InvalidCastException:無法強制'類型'client.Models.layoutSettings.layoutSettingsViewModel'類型的對象類型'System.Windows.DependencyObject'。
layoutSettingsViewModel是xaml視圖。所以我認爲觀點本身在某種程度上獲得了價值,而不是控制......不過,我不確定 - 我猜你們中的一個人確切知道它是什麼意思,爲什麼......我討厭試圖加快速度新語言...
無論如何,任何幫助和/或建議表示讚賞。
你得到在輸出窗口任何綁定錯誤時驗證.HasError設置爲false?以及如何和你在哪裏設置wpfMisc:myCtrl.tooltipValue也可以分享你對你所申請這些觸發器控制? – Nitin
兩件事我會爲開始,首先嚐試只返回 obj.GetValue不需要所有其他代碼,因爲現在WPF(C#)可能會優化您的附加屬性代碼和它通常預計的默認實現這可能不是這樣的(但只是要確定), 其次,加回叫你DP,看看值實際上 變化,當和你以外,讓我知道ü想出什麼樣的。 –
尼特,我有代碼,但由於某種原因,它沒有顯示。就是現在。我一直在測試一個簡單的文本框,雖然我想用它來處理任何數據輸入。 – JustMeToo