2011-09-26 58 views
0

我爲TextBox聲明瞭一個簡單的Validation.ErrorTemplate,如下所示。在Validation.ErrorTemplate中綁定TextBlock的FontSize

<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> 

我想到的是感嘆號的字體大小將是相同的字體(編輯)大小,文本框,但它不會導致預期始終得到默認的字體大小。此外,我嘗試使用RelativeSource={RelativeSource Mode=TemplatedParent}, Path=FontSize Binding,但它也不能解決問題。爲什麼會出現這種情況?我怎樣才能讓感嘆號獲得與TextBox相同的大小?

+0

你的任務有點模棱兩可。您是否嘗試綁定到應用於文本框的字體大小,還是嘗試綁定到文本框的大小?如果前者在文本框中應用了不同的字體大小? – CBRRacer

+0

@CBRRacer:這個問題不是你提到的。我打算當「文本框」的文本無效時,感嘆號出現在文本框的右側,感嘆號的字體大小與文本框的字體大小相同。 –

回答

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> 

這是未經測試,但它應該工作:)

+0

我發現有簡單的方法。非常感謝。 –

0

另一種選擇是包裹TextBlockViewbox,它與佐餐元素沿自動縮放高度:

<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> 

這將適用於任何元素被裝飾,無論字體大小,任何感嘆號圖形(即文本,路徑,元素等)

定位/佈局可以調整裕度。