【问题标题】:Binding FontSize of TextBlock in Validation.ErrorTemplate在Validation.ErrorTemplate中绑定TextBlock的FontSize
【发布时间】:2011-09-26 12:47:01
【问题描述】:

我为 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 的 font(edited) 大小相同,但它不会导致预期并始终获得默认字体大小。此外,我尝试使用RelativeSource={RelativeSource Mode=TemplatedParent}, Path=FontSize 进行绑定,但它也无法解决问题。为什么会出现这种情况?如何让感叹号和TextBox一样大?

【问题讨论】:

  • 你的任务有点模棱两可。您是要绑定到应用于文本框的字体大小还是要绑定到文本框的大小?如果是前者,您是否对文本框应用了不同的字体大小?
  • @CBRRacer:这个问题不是你提到的。我打算当TextBox的文本无效时,TextBox右侧会出现一个感叹号,并且感叹号的字体大小与TextBox的字体大小相同。

标签: c# .net wpf xaml errortemplate


【解决方案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>

这是未经测试的,但它应该可以工作:)

【讨论】:

  • 我看到有简单的方法。非常感谢。
【解决方案2】:

另一种选择是将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>

这将适用于任何被装饰的元素,无论字体大小,任何感叹号图形(即文本、路径、元素等)

可以使用边距调整定位/布局。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-16
    • 2016-08-27
    • 2015-11-17
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多