私は過去のアプリでWPFとIDataErrorInfoを使用して、装飾に画像を配置し、このように画像にツールチップを追加することで、コントロールテンプレートを介してユーザーにエラーを表示しました。
<Style x:Key="textStyle" TargetType="TextBox">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True">
<Border BorderBrush="Orange"
BorderThickness="2"
CornerRadius="4"
SnapsToDevicePixels="True">
<Border.Effect>
<DropShadowEffect BlurRadius="10"
ShadowDepth="0"
Color="Orange" />
</Border.Effect>
<DockPanel>
<Image Width="16"
Height="16"
Margin="-20,0,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
RenderOptions.BitmapScalingMode="HighQuality"
Source="{StaticResource imgError}"
ToolTip="{Binding ElementName=adornedElement,
Path=AdornedElement.(Validation.Errors).CurrentItem.ErrorContent}"
ToolTipService.ShowDuration="30000" />
<AdornedElementPlaceholder Name="adornedElement" />
</DockPanel>
</Border>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
ViewModelにIDataErrorInfoを適切に実装し、それに応じてビューにTextboxを設定すると、画像とツールチップが表示されます。
<TextBox Name="txt"
Grid.Column="0"
Height="40"
Background="Aqua"
Style="{StaticResource textStyle}"
Text="{Binding Path=Text,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=True}" />
<TextBlock Grid.Column="1"
Height="40"
Background="AliceBlue"
Text="{Binding ElementName=txt,
Path=(Validation.Errors).CurrentItem.ErrorContent}" />
上記のコードは以前のアプリで正しく表示され、Textblockで確認された画像ツールチップにエラーが表示されます。
ただし、Prismを使用して構築された現在のアプリでは、画像を表示できません。TextBlockは正しく更新され、スタイルトリガーを介してTextBoxツールチップにエラーを問題なく設定できます。問題は、Adornerに表示する画像(または他のもの)を取得できないように見えることです。画像は表示されず、境界線は変更されません。
以前のアプリとこれとの違いは、ビューがContentControlのリージョンにあり、依存性注入を使用してビューモデルをビューコンストラクターに注入し、DataContextを設定したことです。
以前は機能していたのに、なぜこれが機能しないのか理解できません。どこかにAdornerDecoratorを含める必要があると思いますが、いくつかの場所で試しても成功しなかったので困惑しています。Adornerが表示されるようにするにはどうすればよいですか?