WPF XML :lang/Language binding

标签 wpf xaml binding

如何绑定(bind) 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>

结果应根据 Lang 属性:

2011年4月1日 - 2011年4月1日 en-US

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

或者...

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

有什么想法吗?

最佳答案

在应用程序的Startup事件中,添加以下指令:

FrameworkElement.LanguageProperty.OverrideMetadata(
    typeof(FrameworkElement),
    new FrameworkPropertyMetadata(
        XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

它将整个应用程序的 Language 属性的默认值覆盖为当前区域性。

<小时/>

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

如果要将 Language 属性绑定(bind)到包含 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;
    }
}

在 XAML 资源中声明转换器:

<local:IetfTagToXmlLanguageConverter x:Key="languageConverter" />

并在绑定(bind)中使用转换器:

<TextBlock Language="{Binding Lang, Converter={StaticResource languageConverter}}">

关于WPF XML :lang/Language binding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5606789/

相关文章:

c# - 单选按钮绑定(bind) MVVM 应用程序

c# - 如何确保用户在文本框中输入了电子邮件地址?

c# - XAML GridView 模板绑定(bind)到项目

c# - 绑定(bind)到集合计数

binding - ember.js 中的 bind-attr 是如何工作的?

c# - 加载和保存 anchor 布局 - 可见性绑定(bind)

c# - WPF 中的可拖动控件?

xaml - 使用关键字将 clr 命名空间映射到 xaml 命名空间

c# - : the attachable property triggers was not found in style in a Grid Application如何解决

wpf - 如何在DataTrigger中延迟Setter生效0.5秒?