0
赤い枠線、エラーイメージ、エラーテキストを新しい行に表示するテキストボックスのスタイルを作成しました。 下の図のようなテキストボックスの下部にスペースがある場合は機能します。 Wpfでテンプレートの高さをコントロールする方法
有効なテキストボックスの下に他のコントロールがある場合は、アイコンとエラーテキストが表示されません。
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<StackPanel>
<Border x:Name="Bd" SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
<ScrollViewer VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
<Grid x:Name="errorBlock" Visibility="Hidden" Margin="0,2,0,-30" Z>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Source="Error.png" Height="14" Width="14"
HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0,0,5,0"/>
<TextBlock Grid.Column="1" Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type TextBox}},Path=(Validation.Errors)[0].ErrorContent}" />
</Grid>
</StackPanel>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Validation.HasError" Value="True"/>
<Condition Property="IsEnabled" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Visibility" TargetName="errorBlock" Value="Visible" />
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>