1

我想使用 Label 或 TextBlock 来显示一个小写字母并附加我从资源中获得的“:”字符串。例如这样的:

<Label Content="{x:Static Localization:Captions.Login}" />

其中 Captions.Login 是字符串“Login”,我认为输出应该是:“login:”。我为标签添加了一个模板,它附加了“:”,但我无法在这个模板中小写我的字符串:

  <ControlTemplate x:Key="LabelControlTemplate" TargetType="{x:Type Label}">
    <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True">
        <TextBlock>
            <Run Text="{TemplateBinding Content}"/>
            <Run Text=":"/>
        </TextBlock>
    </Border>
    <ControlTemplate.Triggers>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
        </Trigger>
    </ControlTemplate.Triggers>
  </ControlTemplate>

在没有 Controltemplate 的情况下使用 xaml 行,我可以获得相同的结果:

<Label Content="{x:Static Localization:Captions.Login}" ContentStringFormat="{}{0}:" />

所以最后,我的问题是如何在这种情况下引入小写功能(注意我不想使用 TextBox 和重新样式来实现这一点)

4

2 回答 2

0

使用绑定和转换器怎么样?

<Label Content="{Binding Source="{x:Static Localization:Captions.Login}", Path=., Converter="{StaticResource MyToLowerWithDotConverter}"/>

类似的东西?我没有IDE atm,所以我不知道绑定是否正确。

于 2012-10-25T12:12:18.130 回答
0

使用转换器将您的字符串转换为小写。

public class LowerCaseConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return ((string)value).ToLowerInvariant();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // unnecessary
        throw new NotImplementedException();
    }
}
于 2012-10-25T12:13:53.270 回答