DataGridRow のデフォルト スタイルは次のとおりです。
<Style x:Key="{x:Type DataGridRow}" TargetType="{x:Type DataGridRow}">
<Setter Property="Background" Value="{DynamicResource {x:Static
SystemColors.WindowBrushKey}}" />
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="Validation.ErrorTemplate" Value="{x:Null}" />
<Setter Property="ValidationErrorTemplate">
<Setter.Value>
<ControlTemplate>
<TextBlock Margin="2,0,0,0" VerticalAlignment="Center"
Foreground="Red" Text="!" />
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Template">
...
</Setter>
</Style>
私が欲しいのは、「!」を表示する TextBlock に ToolTip を追加することです。行ヘッダーで、DataGridRow.Item.Error プロパティからエラー メッセージを取得します (私のエンティティ オブジェクトは IDataErrorInfo を実装しています)。だから私は次のことをしました:
<TextBlock Margin="2,0,0,0" VerticalAlignment="Center"
Foreground="Red" Text="!"
ToolTip="{Binding RelativeSource={
RelativeSource FindAncestor,
AncestorType={x:Type DataGridRow}},
Path=Item.Error}"/>
ここまでは順調ですね。現在、Error プロパティは複数行の文字列を返すため、ToolTip に TextBlock を使用したいと考えています。
<TextBlock Margin="2,0,0,0" VerticalAlignment="Center"
Foreground="Red" Text="!">
<TextBlock.ToolTip >
<TextBlock Text="{Binding RelativeSource={
RelativeSource FindAncestor,
AncestorType={x:Type DataGridRow}},
Path=Item.Error}"
TextWrapping="Wrap"/>
</TextBlock.ToolTip>
</TextBlock>
ただし、上記はエラー メッセージを表示しません。問題は、ToolTip が親要素のビジュアル ツリーの一部ではないことです。PlacementTarget などについて読んだことがありますが、まだ仕事を終わらせることができませんでした。誰かが上記を行う適切な方法を教えてもらえますか?