Validation.ErrorTemplate
TextBoxesとして使用する次のコントロール テンプレートがあります。
<ControlTemplate x:Key="ControlValidationErrorTemplate">
<DockPanel LastChildFill="True">
<Border Background="Red"
DockPanel.Dock="right"
Padding="2,0,2,0"
ToolTip="{Binding ElementName=valAdorner, Path=AdornedElement.(Validation.Errors), Converter={x:Static val:ValidationErrorsConverter.Instance}}">
<TextBlock Text="!"
VerticalAlignment="center"
HorizontalAlignment="center"
FontWeight="Bold"
Foreground="white" />
</Border>
<AdornedElementPlaceholder x:Name="valAdorner"
VerticalAlignment="Center">
<Border BorderBrush="red"
BorderThickness="1" />
</AdornedElementPlaceholder>
</DockPanel>
</ControlTemplate>
TextBox に無効なコンテンツが含まれている場合、上記のテンプレートは赤い境界線を適用し、感嘆符を含む赤いボックスを TB のすぐ右に追加します。
問題は、感嘆符に合わせてレイアウトが変更されるのではなく、感嘆符が TB のすぐ右側に重なってしまうことです。DataGrids にも同様の問題があります。感嘆符は、それに対応するために列幅が増加するのではなく、含まれているセルの右端に重なっています。
Snoop を使用すると、別のビジュアル ツリーであると思われる「装飾レイヤー」にテンプレートが表示されているように見えますか? これにより、感嘆符を考慮してウィンドウのレイアウトが再計算されない理由が説明されます。誰でも私が望むものを達成する方法を提案できますか?