Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Validation.ErrorTemplate中TextBlock的绑定字体大小_C#_.net_Wpf_Xaml_Errortemplate - Fatal编程技术网

C# Validation.ErrorTemplate中TextBlock的绑定字体大小

C# Validation.ErrorTemplate中TextBlock的绑定字体大小,c#,.net,wpf,xaml,errortemplate,C#,.net,Wpf,Xaml,Errortemplate,我为TextBox声明了一个简单的Validation.ErrorTemplate,如下所示 <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}"> <Setter Property="Validation.ErrorTemplate"> <Setter.Value> <ControlTemplate

我为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={relativesourcemode=TemplatedParent},Path=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="{Binding ElementName=adornerPlaceholder, Path=AdornedElement.FontSize}" 
                           Foreground="Red"/>
                <AdornedElementPlaceholder  Name="adornerPlaceholder" />
            </DockPanel>
        </ControlTemplate>
    </Setter.Value>
</Setter>
</Style>


这是未经测试的,但应该可以使用:)

另一个选项是将
文本块
包装在
视图框
中,该视图框会随着装饰元素自动缩放其高度:

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

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


定位/布局可以通过边距进行调整。

您的任务有点含糊不清。您是要绑定到应用于文本框的字体大小,还是要绑定到文本框的大小?如果是前者,您是否对文本框应用了不同的字体大小?@cbracer:这个问题不是您提到的两个问题。我希望当
TextBox
的文本无效时,文本框的右边会出现一个感叹号,感叹号的字体大小与文本框的字体大小相同。我发现有一个简单的方法。谢谢。