簡體   English   中英

在Validation.ErrorTemplate中綁定TextBlock的FontSize

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM