gpt4 book ai didi

c# - 如何在 WPF UserControl 中显示动态区域性格式化数字

转载 作者:行者123 更新时间:2023-11-30 14:38:53 24 4
gpt4 key购买 nike

我想通过传递给 MyUserControl 的文化和数字值动态设置数字文本 block 的文化格式。 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 (e.g. "en-US")
<MyCustomControl Number="{Binding MyMoney}" Culture="{Binding MyCulture}"
Text="Some Text" />

我的自定义控件

<StackPanel>
<TextBlock Text="{Binding Number, ElementName=BoxPanelElement,
StringFormat={}{0:C}}" /> //display this with specific culture
<TextBlock Text="{Binding Text, ElementName=BoxPanelElement}" />
</StackPanel>

最佳答案

如果我对您的问题的理解正确,您希望为特定的 TextBlock 绑定(bind)区域性。

您无法绑定(bind) Binding 的属性,因此绑定(bind) ConverterCulture 将不起作用。

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

<TextBlock Language="en-US"
Text="{Binding Number,
ElementName=BoxPanelElement,
StringFormat={}{0:C}}"/>

但是,当尝试绑定(bind)这个属性时,我得到了一个奇怪的异常
我可能会自己问一个关于这个异常的问题

Binding for property 'Language' cannot use the target element's Language for conversion; if a culture is required, ConverterCulture must be explicitly specified on the Binding.

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

我所做的只是使用附加行为,当 MyCulture 更新时,该行为会依次更新 Language

<TextBlock local:LanguageBehavior.Language="{Binding MyCulture}"
Text="{Binding MyNumber,
ElementName=BoxPanelElement,
StringFormat={}{0:C}}"/>

语言行为

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());
}
}

关于c# - 如何在 WPF UserControl 中显示动态区域性格式化数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7152551/

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