如何在WPF的TextBlock上应用字符大小写?

3
我是一个有用的助手,可以翻译文本。

我在WPF应用程序中有一个特定的TextBlock。 我需要将该特定TextBlock的文本转换为大写。

尝试使用以下代码时,我收到此错误:

{"'TextUpperCase' is not a valid value for property 'Style'."}

有什么想法如何解决它吗?
  <Style x:Key="TextUpperCase" TargetType="{x:Type TextBox}">
        <Setter Property="CharacterCasing" Value="Upper"/>
    </Style>


                <TextBlock
                    x:Name="ShopNameTextBlock"
                    TextWrapping="Wrap"
                    Text="{Binding Description, FallbackValue=Shop name}"
                    Style="TextUpperCase"
                    VerticalAlignment="Center" 
                    FontFamily="/GateeClientWPF;component/Fonts/#Letter Gothic L"
                    FontSize="45"
                    Grid.ColumnSpan="2"
                    Margin="0,60,0,0"
                    FontWeight="Medium"
                    TextAlignment="Center"
                    Foreground="Black"
                    />
2个回答

9

CharacterCasing 不是 TextBlock 的有效属性,它是用于 TextBox 的。

您可以使用 IValueConverter,并将其与绑定一起使用,以将文本转换为大写。


声明转换器:

public class ToUpperValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter,
                          CultureInfo culture)
    {
        if (value is string)
        {
           return value.ToString().ToUpper();
        }
        return String.Empty;
    }

    public object ConvertBack(object value, Type targetType, object parameter,
                              CultureInfo culture)
    {
        return Binding.DoNothing;
    }
}

现在,在XAML中添加您的转换器的引用,并像这样使用:
<TextBlock Text="{Binding Description,
                  Converter={StaticResource ToUpperValueConverter}}"/>

2
@RohitVats 有没有一种通用的方法可以将 TextBlock 的文本转换为大写?我的意思是我希望所有的 TextBlock/ListBoxItems 都是大写的。这可能吗? - Vishal

-4

要使用样式,您必须首先在UserControl.Resources中声明:

<UserControl.Resources>
        <Style x:Key="TextUpperCase" TargetType="{x:Type TextBox}">
            <Setter Property="CharacterCasing" Value="Upper"/>
        </Style>
</UserControl.Resources>

1
TextBlock才是问题所在,而不是TextBox——TextBlock没有这个属性可访问。这个答案不适用。 - TravisWhidden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接