1

リソースから取得した小文字の ":" 文字列を表示する Label または TextBlock を使用したいと考えています。たとえば、次のようなものです。

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

ここで Captions.Login は文字列 "Login" であり、ビューの出力は "login:" になります。「:」を追加する Label のテンプレートを追加しましたが、このテンプレート内で文字列を小文字にすることはできません。

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

Xaml の行である Controltemplate を使用せずに使用しても同じ結果が得られます。

<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

Converter を使用して、文字列を小文字に変換します。

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 に答える