[英]Binding FontSize of TextBlock in Validation.ErrorTemplate
我為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大小相同?
為什么不綁定到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>
這未經測試,但應該可以工作:)
另一個選擇是將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>
這樣,無論字體大小如何,任何裝飾的元素(例如文本,路徑,元素等)都可以使用,這對於任何裝飾的元素都適用。
可以用邊距調整位置/布局。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.