6

私がラベルを持っている場合:

<Label Content="{StaticResource Foo}" />

xamlに*を追加する方法はありますか?

私は次のようなものを探しています:

<Label Content="{StaticResource Foo, stringformat={0}*" />

アプリケーションは複数の言語をサポートしているため、リソースディクショナリからコントロールのコンテンツを配置しています。xamlに*を追加して、イベントを作成し、そのイベントが発生したときに追加する必要がないようにできるかどうか疑問に思いました。

編集:

リソース辞書には次のものがあります。

 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:system="clr-namespace:System;assembly=mscorlib"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                >

     <system:String x:Key="Foo">Name</system:String>

 </ResourceDictionary>

私のウィンドウには:(最後の辞書をマージします)

  <Label Content="{StaticResource 'Foo'}" />

名前が表示されます

名前だけでなく名前*を表示するラベルが欲しい

たぶん、スタイルでそれを達成することが可能になるでしょう。

4

2 に答える 2

14

それには複数の方法があります。

  1. ContentStringFormat の場合:

    <Label Content="{StaticResource Foo}" ContentStringFormat='{}{0}*'/>
    
  2. StringFormatを使用したバインド(文字列プロパティでのみ機能するため、のコンテンツ TextBlockとしてa を使用する必要があります)Label

    <Label>
       <TextBlock 
           Text="{Binding Source={StaticResource Foo}, StringFormat='{}{0}*'}"/>
    </Label>
    
  3. または、コンバーターを作成して追加することもできます*
于 2012-04-16T21:30:49.060 に答える
1

@nemesvの回答のおかげで、これは私が最終的に得たものです:

次のコンバーターを作成しました。

using System;
using System.Windows.Data;
using System.Globalization;

namespace PDV.Converters
{
    [ValueConversion(typeof(String), typeof(String))]
    public class RequiredFieldConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return value.ToString() + "*";
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var str = value.ToString();
            return str.Substring(0, str.Length - 2);
        }
    }
}

app.xaml ファイルでリソースを作成しました

<Application x:Class="PDV.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml"

             xmlns:conv="clr-namespace:PDV.Converters"  <!--  Include the namespace where converter is located-->
             >
    <Application.Resources>
        <ResourceDictionary >
            <conv:RequiredFieldConverter x:Key="RequiredFieldConverter" />
        </ResourceDictionary>
    </Application.Resources>

</Application>

次に、アプリケーションのどこでも、そのコンバーターを次のように使用できます。

    <Label Content="{Binding Source={StaticResource NameField}, Converter={StaticResource RequiredFieldConverter} }" />
于 2012-04-16T22:21:02.473 に答える