0

我为“必填字段”标签创建了一个样式,该样式应在标签前面放置一个红色星号“*”。这是从我的 WPF 应用程序的 Application.Resources 部分获取的 xaml:

    <Style TargetType="Label" x:Key="RequiredField">
        <Setter Property="Margin" Value="0,0,5,0" />
        <Setter Property="HorizontalAlignment" Value="Right" />
        <Setter Property="Content">
            <Setter.Value>
                <ControlTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="*" Foreground="Red" FontSize="10"/>
                        <TextBlock Text="{Binding}" />
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
         </Setter>
    </Style>

我认为 xaml 使用这样的资源:

<Label Grid.Row="1" Grid.Column="0" Style="{StaticResource RequiredField}" Content="Name:"/>

令人讨厌的是,它似乎没有修改标签。谁能告诉我我做错了什么?

4

2 回答 2

1

好吧,你的风格似乎是错误的。我会这样尝试。

<Style TargetType="Label" x:Key="RequiredField">
    <Setter Property="Margin" Value="0,0,5,0" />
    <Setter Property="HorizontalAlignment" Value="Right" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Label}">
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="*" Foreground="Red" FontSize="10"/>
                    <TextBlock Text="{TemplateBinding Content}" />
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
     </Setter>
</Style>

这应该可以解决问题,但它完全未经测试。

于 2013-05-15T08:32:45.003 回答
0

模板被分配给 Content 属性。那是错的。

相反,它可以分配给 Template 属性,但在这种情况下,使用 Validation.ErrorTemplate 属性可能会更好,因为它适用于验证装饰器。

从这篇文章

<ControlTemplate x:Key="TextBoxErrorTemplate">
    <StackPanel>
        <StackPanel Orientation="Horizontal">
            <Image Height="16" Margin="0,0,5,0" 
                    Source="Assets/warning_48.png"/>
            <AdornedElementPlaceholder x:Name="Holder"/>
        </StackPanel>
        <Label Foreground="Red" Content="{Binding ElementName=Holder, 
               Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"/>
    </StackPanel>
</ControlTemplate>

<TextBox x:Name="Box" 
     Validation.ErrorTemplate="{StaticResource TextBoxErrorTemplate}">
于 2013-05-15T08:30:43.390 回答