如何在WPF UserControl中显示动态文化格式化的数字

我想动态设置Number文本块的文化格式,其中包含传递给MyUserControl的文化和数字值。 MyCulture和Number值将传递给MyCustomControl,其格式为“en-GB”,“en-US”等。

我在asp.NET MVC中使用扩展方法做了类似的事情,但需要帮助如何在WPF中将它拼凑在一起。

示例MVC扩展方法

public static MvcHtmlString CulturedAmount(this decimal value, string format, string locale) { if (string.IsNullOrEmpty(locale)) locale = HttpContext.Current.Request.UserLanguages[0]; return MvcHtmlString.Create(value.ToString(format, CultureInfo.CreateSpecificCulture(locale))); } 

窗口

 //MyMoney is a decimal, MyCulture is a string (eg "en-US")  

MyCustomControl

   //display this with specific culture   

如果我正确理解您的问题,您希望将文化绑定到特定的TextBlock

您无法绑定绑定的属性,因此绑定ConverterCulture将无法正常工作。

FrameworkElement上有一个Language属性,可以像这样设置

  

但是,在尝试绑定此属性时,我得到一个奇怪的exception
我可能会自己问这个例外的问题

属性“语言”的绑定不能使用目标元素的语言进行转换; 如果需要文化,则必须在Binding上明确指定ConverterCulture。

根据Thomas Levesque的回答,这应该是可能的,所以也许我做错了什么.. WPF xml:lang /语言绑定

我所有工作的都是使用附加行为,当MyCulture更新时,它会更新Language

  

LanguageBehavior

 public class LanguageBehavior { public static DependencyProperty LanguageProperty = DependencyProperty.RegisterAttached("Language", typeof(string), typeof(LanguageBehavior), new UIPropertyMetadata(LanguageBehavior.OnLanguageChanged)); public static void SetLanguage(FrameworkElement target, string value) { target.SetValue(LanguageBehavior.LanguageProperty, value); } public static string GetLanguage(FrameworkElement target) { return (string)target.GetValue(LanguageBehavior.LanguageProperty); } private static void OnLanguageChanged(DependencyObject target, DependencyPropertyChangedEventArgs e) { FrameworkElement element = target as FrameworkElement; element.Language = XmlLanguage.GetLanguage(e.NewValue.ToString()); } } 

似乎转换器就是答案。 界面包含文化价值。

  Convert(object value, Type targetType, object parameter, CultureInfo culture) 

但我找不到传递文化的语法。 对不起,这不是一个完整且经过测试的答案,但我没时间了。

绑定文化的URL。
http://msdn.microsoft.com/en-us/library/system.windows.data.binding.converterculture.aspx

传递aa参数的语法是:

  Converter={StaticResource colorConverter}, ConverterParameter=GREEN}" 

您可能需要使用ConverterParameter将culture作为字符串传递。

我同意Meleak无法将参数绑定到转换器。 给了他一个+1。 但我认为你可以使用MultiBinding转换器来欺骗它。