我对渲染验证模板有一个奇怪的问题。当我调整主窗口大小时,错误模板不会稳定它们包装的控件。这适用于文本框和组合框。
渲染错误
良好的渲染
错误模板
<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>
我应用验证模板的方式是否存在明显错误?
答案 0 :(得分:0)
我有一个类似的问题,我的控件有Grid.IsSharedSizeScope="True"
,并且当视图加载正确时,控件的大小已正确调整,但错误模板保持不变。默认的WPF错误模板也发生了这种情况。我和Adorners玩了一段时间,但没有找到任何解决方案。最后,我做到了:
<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时,它没有正确对齐边框。