设置单个WPF用户控件的文化

时间:2012-04-30 06:23:29

标签: wpf user-controls culture

我编写的用户控件与“en-US”以外的文化不兼容。此外,将此用户控件嵌入到具有非“en-US”文化的应用程序中也是不可避免的。那么是否可以强制应用程序不要更改此用户控件的文化?
最好在用户控制器内部有一个解决方案。
我读过这个帖子: Localizing a WinForms Application with Embedded WPF User Controls 但我不能使用 WpfLocalization.LocalizationScope.SetCulture
这个功能真的存在吗?

还有一个可本地化标记,可以设置为 False ,但它仅用于 .csproj 文件中的资源定义: http://msdn.microsoft.com/en-us/library/ms788718.aspx

那么有没有人对这个问题有任何想法?

<小时/> 更多澄清:
 假设我们有一个带有文化X的应用程序和一个与文化“en-US”兼容的用户控件。此用户控件具有依赖项属性,该属性具有DateTime类型,并且通过这种方式获取其值:

<my:uc1 x:Name="UserControl1" Date="4234/12/22" />

当应用程序文化为“en-US”时,用户控制权将获得“4234/12/22”,但当应用程序文化为其他内容时,它会转换“4234/12/22 “自动进入应用程序自己的日历,并向用户控件提供”0744/04/08“,并破坏用户控件背后的每一个逻辑!这完全是一场灾难。

我想通过将用户控件的文化专门设置为“en-US”来阻止此转换。

希望我已经充分澄清了这一情况。

1 个答案:

答案 0 :(得分:4)

您可以设置控件的FrameworkElement.Language属性,或将xml:lang属性应用于控件的XAML。您必须设置的值为en-US

使用此属性/属性设置的区域性会影响控件中特定于区域性的字符串的转换方式。例如。如果您使用DateTime(长日期)格式显示D,那么Monday, 30 April 2012xml:lang="en-US"30. april 2012 xml:lang="da-DK"时会显示<my:uc1 x:Name="UserControl1" Date="4/30/2012" /> 。 / p>

但是,如果您在XAML中指定日期,例如

CultureInfo.InvariantCulture

使用en-US(基本上30/4/2012)解析该日期。这不是你似乎描述的行为。您在描述真实问题时有点模糊,但为了验证我的声明,您可以尝试输入en-US日期并查看它无法编译。它不仅在Visual Studio的当前文化为da-DK时,而且在我的案例d/M/yyyy(日期格式为{{1}})中也是如此。