WPF xml:lang /语言绑定

ide*_*rel 2 wpf xaml binding

如何绑定Listbox或texblock的Language属性(或xml:lang属性).

我想在特定的语言设置中显示月份名称

例如:

<TextBlock x:Name="Date" xml:lang="{Binding Lang}">
        <TextBlock.Text>
            <MultiBinding StringFormat=" {0:dd.MMM.yyyy}-{1:dd.MMM.yyyy}">
                <Binding Path="Date1"/>
                <Binding Path="Date2"/>
            </MultiBinding>
</TextBlock.Text>
Run Code Online (Sandbox Code Playgroud)

结果应该是郎属性:

2011年4月1日至2011年4月1日,美国

或01.Nis.2011 - 02.Nis.2011 tr-TR

要么 ....

它给出了XamlParseException:语言属性无法转换为System.Windows.Markup.XmlLanguage类型(这不是精确的错误文本.)

任何的想法?

Tho*_*que 5

Startup应用程序的事件,添加此指令:

FrameworkElement.LanguageProperty.OverrideMetadata(
    typeof(FrameworkElement),
    new FrameworkPropertyMetadata(
        XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
Run Code Online (Sandbox Code Playgroud)

Language对于整个应用程序,它将覆盖当前区域性的属性的默认值.


编辑:好的,我误解了你的问题......

如果要将Language属性绑定到包含该属性的字符串IetfLanguageTag,则需要转换器:

[ValueConversion(typeof(string), typeof(XmlLanguage))]
public class IetfTagToXmlLanguageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string tag = value as string;
        if (tag == null)
            return Binding.DoNothing;
        return XmlLanguage.GetLanguage(tag);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        XmlLanguage lang = value as XmlLanguage;
        if (lang == null)
            return Binding.DoNothing;
        return lang.IetfLanguageTag;
    }
}
Run Code Online (Sandbox Code Playgroud)

在XAML资源中声明转换器:

<local:IetfTagToXmlLanguageConverter x:Key="languageConverter" />
Run Code Online (Sandbox Code Playgroud)

并在绑定中使用转换器:

<TextBlock Language="{Binding Lang, Converter={StaticResource languageConverter}}">
Run Code Online (Sandbox Code Playgroud)

  • @Thomas Levesque:这对你有用吗?当我尝试时,出现异常,提示“属性‘语言’的绑定不能使用目标元素的语言进行转换;如果需要区域性,则必须在 Binding` 上显式指定 ConverterCulture。不确定这意味着什么,因为可以毫无问题地设置和更改“Language”的值 (2认同)