我有一个带有TextBox的XAML窗口,这个TextBox有一个ErrorTemplate。
ErrorTemplate如下所示,正如您所看到的,我有一个AdornedElementPlaceholder,后跟一个文本框,其Text字段绑定到ErrorContent:
<ControlTemplate x:Key="ValidationErrorTemplateTextBlock" TargetType="{x:Type Control}">
<Border BorderBrush="Red" BorderThickness="1">
<StackPanel Orientation="Vertical">
<AdornedElementPlaceholder Name="AdornedElementPlaceholder" />
<TextBlock Text="{Binding ElementName=AdornedElementPlaceholder, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"
FontSize="10"
Background="Red"
Foreground="White"
Padding="2" />
</StackPanel>
</Border>
</ControlTemplate>
<TextBox IsEnabled="{Binding SendMessage}"
Text="{Binding AutoMessageSubject, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource StyleBase}"
Validation.ErrorTemplate="{StaticResource ValidationErrorTemplateTextBlock}"
HorizontalAlignment="Stretch"
Grid.Row="3"
Grid.Column="1"
Grid.ColumnSpan="2" />
这样做很好,除了一件事:TextBox在GridRow中,高度=&#34; Auto&#34;。行根据文本框进行缩放,但是当ErrorTemplate出现时,底部有一个额外的TextBox - GridRow不会向上扩展以包含新的TextBox,而新的TextBox会重叠它下面的元素。
我该如何解决这个问题?
答案 0 :(得分:1)
Validation.ErrorTemplate:获取或设置用于在装配层上生成验证错误反馈的ControlTemplate。
这意味着如果您使用Validation.ErrorTemplate
,则验证错误会显示在上方常用内容上,因此“第二个”TextBlock会显示在网格上,而不会显示在网格中细胞
我会实现INotifyDataErrorInfo
而不是半过时的IDataErrorInfo
,使用自定义文本框样式,并将第二个TextBlock的可见性绑定到HasErrors
属性。下面的示例使用ToolTip而不是第二个TextBlock:
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip">
<Setter.Value>
<ToolTip DataContext="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget}">
<ItemsControl DisplayMemberPath="ErrorContent" ItemsSource="{Binding Path=(Validation.Errors)}" />
</ToolTip>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
答案 1 :(得分:0)
您可能想尝试添加行/列定义:
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>