我为TextBox声明了一个简单的Validation.ErrorTemplate,如下所示。
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True">
<TextBlock Text="!" DockPanel.Dock="Right"
FontSize="{TemplateBinding TextBox.FontSize}"
Foreground="Red"/>
<AdornedElementPlaceholder Name="adornerPlaceholder" />
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我希望感叹号的字体大小与TextBox的字体(已编辑)大小相同,但它不会产生预期,并且始终会获得默认字体大小。此外,我尝试使用RelativeSource={RelativeSource Mode=TemplatedParent}, Path=FontSize
进行绑定,但它也无法解决问题。为什么会出现这种情况?如何使感叹号与TextBox的大小相同?
答案 0 :(得分:1)
为什么不绑定AdornedElementPlaceholder
?
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True">
<TextBlock Text="!" DockPanel.Dock="Right"
FontSize="{Binding ElementName=adornerPlaceholder, Path=AdornedElement.FontSize}"
Foreground="Red"/>
<AdornedElementPlaceholder Name="adornerPlaceholder" />
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这是未经测试的,但它应该有效:)
答案 1 :(得分:0)
另一种选择是将TextBlock
包裹在Viewbox
中,自动将其高度与装饰元素一起展开:
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True">
<Viewbox DockPanel.Dock="Right"
Height="{Binding ElementName=adornerPlaceholder, Path=ActualHeight}"
Stretch="Uniform"
Margin="5 0">
<TextBlock Text="!" Foreground="Red" />
</Viewbox>
<AdornedElementPlaceholder Name="adornerPlaceholder" />
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这适用于任何被装饰的元素,无论字体大小,任何感叹图形(即文本,路径,元素等)
定位/布局可以通过保证金调整。