C# 为什么不';t我的错误模板是否正确包装我的已验证wpf控件
我对呈现验证模板有一个奇怪的问题。当我调整主窗口的大小时,错误模板在它们包装的控件上不稳定。文本框和组合框会发生这种情况 糟糕的渲染 好的渲染 错误模板C# 为什么不';t我的错误模板是否正确包装我的已验证wpf控件,c#,wpf,validation,xaml,layout,C#,Wpf,Validation,Xaml,Layout,我对呈现验证模板有一个奇怪的问题。当我调整主窗口的大小时,错误模板在它们包装的控件上不稳定。文本框和组合框会发生这种情况 糟糕的渲染 好的渲染 错误模板 <ControlTemplate x:Key="ErrorTemplate"> <DockPanel> <Grid HorizontalAlignment="Right" DockPanel.Dock="Right" Width="16" Height="16" VerticalAl
<ControlTemplate x:Key="ErrorTemplate">
<DockPanel>
<Grid HorizontalAlignment="Right" DockPanel.Dock="Right" Width="16" Height="16" VerticalAlignment="Center" Margin="3,0" Opacity="0.5">
<Ellipse Width="16" Height="16" Fill="Red"/>
<Ellipse Width="3" Height="8" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="0 2 0 0" Fill="White"/>
<Ellipse Width="2" Height="2" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0 0 0 2" Fill="White"/>
</Grid>
<Border BorderBrush="Red" BorderThickness="2" CornerRadius="2">
<AdornedElementPlaceholder/>
</Border>
</DockPanel>
</ControlTemplate>
应用于组合框的样式
<Style TargetType="ComboBox">
<Setter Property="Validation.ErrorTemplate" Value="{StaticResource ErrorTemplate}"/>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
我应用验证模板的方式是否存在明显的错误?我也有类似的问题,我的控件有网格。IsSharedSizeScope=“True”,当视图正确加载控件时,错误模板保持不变。默认的WPF错误模板也出现了这种情况。我和装饰师玩了一段时间,但没有找到任何解决办法。最后我做到了:
<ControlTemplate x:Key="MyErrorTemplate">
<Grid>
<Border
Width="{Binding ElementName=adornedElementPlaceholder, Path=AdornedElement.ActualWidth}"
HorizontalAlignment="Left"
BorderBrush="Red"
BorderThickness="1"
CornerRadius="0"
RenderOptions.EdgeMode="Aliased"
SnapsToDevicePixels="True">
<Border
BorderBrush="Transparent"
BorderThickness="5"
ToolTip="{Binding Path=[0].ErrorContent}" />
</Border>
<AdornedElementPlaceholder x:Name="adornedElementPlaceholder" Focusable="False" />
</Grid>
</ControlTemplate>
关键是将边框的宽度绑定到装饰元素。我将水平对齐设置为左侧,当我将其设置为(原始)Strech时,它没有正确对齐边框。我建议您下载Snoop,运行程序,然后检查Snoop中的元素。另一件事是我不喜欢在XAML中设置
网格的大小;我更喜欢让所有的尺寸都能满足可用空间。如果我必须在网格中设置大小,我通常会设置列的宽度。网格的大小只是为了制作一个感叹号图标。我试过snoop,但它根本没有显示验证框。