ツールチップを意図したとおりに使用したい。しかし、エラーが発生したときにエラーメッセージを表示するように変更し、エラーが修正されたら元に戻す必要があります。
そこで、ツールチップを保持する添付プロパティを作成しました。ツールチップを添付プロパティに割り当て、スタイルを使用してそれをツールチップ プロパティにコピーします。エラーがある場合、スタイルは代わりにツールチップをエラー メッセージに設定します。
したがって、ツールチップにエラー メッセージを設定するトリガーは次のとおりです。
<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 Error: 17 : Cannot get 'tooltipValue' value (type 'String') from '' (type 'layoutSettingsViewModel'). BindingExpression:パス=(0); DataItem='layoutSettingsViewModel' (HashCode=46457861); ターゲット要素は 'TextBox' (Name='') です。ターゲット プロパティは 'ToolTip' (タイプ 'Object') InvalidCastException:'System.InvalidCastException: タイプ 'client.Models.layoutSettings.layoutSettingsViewModel' のオブジェクトをタイプ 'System.Windows.DependencyObject' にキャストできません。
layoutSettingsViewModel は xaml ビューです。したがって、ビュー自体が何らかの形でコントロールの代わりに値を取得していると思います....確かではありません-あなたの1人がそれが何を意味するのか、そしてその理由を正確に知っていると思います...新しい言語...
とにかく、どんな助けや提案も大歓迎です。