gpt4 book ai didi

WPF XML :lang/Language binding

转载 作者:行者123 更新时间:2023-12-02 15:16:23 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com