如何使用XAML和C#在WP8中实现转换器来大写TexBlock中单词的第一个字母?

时间:2014-05-05 02:50:20

标签: c# xaml windows-phone-8 textblock capitalize

我在XAML中有一个带有TexBlock的数据模板。此TexBlock在单词列表中显示单词。每个单词我想把第一个字母大写,因为所有的单词都是小写的。

<phone:PhoneApplicationPage.Resources>
        <DataTemplate x:Key="AddrBookItemTemplate">
            <StackPanel VerticalAlignment="Top">
                <TextBlock Margin="5,0,0,0" FontSize="20" Text="{Binding name}" />
            </StackPanel>
        </DataTemplate>
 </phone:PhoneApplicationPage.Resources>

在c#中实现转换器

namespace Converter.ViewModels

{

    public class ToCapitalizeConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                return char.ToUpper(value.ToString()[0]) + value.ToString().Substring(1);
            }

            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                return (value as string).ToLower();
            }
        }
}

在App.xaml中

... 的xmlns:VM =&#34; CLR-名称空间:Converter.ViewModels&#34;

   <Application.Resources>
          <vm:ToCapitalizeConverter x:Key="ToCapitalizeConverter"/>    
    </Application>

在MainPage.xaml

<phone:PhoneApplicationPage.Resources>
    <DataTemplate x:Key="AddrBookItemTemplate">
                <StackPanel VerticalAlignment="Top">
                    <TextBlock Margin="5,0,0,0" FontSize="20" Text="{Binding name, Converter={StaticResource ToCapitalizeConverter}}" />                 
                </StackPanel>
           </DataTemplate>
     </phone:PhoneApplicationPage.Resources>

1 个答案:

答案 0 :(得分:1)

您可以按如下方式使用转换器:

<TextBlock Margin="5,0,0,0" FontSize="20" Text="{Binding name, Converter ={StaticResource myConverter}}" />

可以找到有关如何实施转换器的具体信息here。您基本上可以在文本上执行任何您喜欢的操作。我实际上喜欢Humanizer来进行这些类型的文字转换。