Dav*_*vid 3 c# wpf cultureinfo
我想动态设置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 (e.g. "en-US")
<MyCustomControl Number="{Binding MyMoney}" Culture="{Binding MyCulture}" 
    Text="Some Text" />
MyCustomControl
<StackPanel>
    <TextBlock Text="{Binding Number, ElementName=BoxPanelElement, 
        StringFormat={}{0:C}}" /> //display this with specific culture
    <TextBlock Text="{Binding Text, ElementName=BoxPanelElement}" />
</StackPanel>
如果我正确理解你的问题,你想要将文化与特定的文化结合起来TextBlock.
你不能绑定一个Binding如此绑定的属性ConverterCulture将无法正常工作.
有一个Language属性FrameworkElement可以正常工作这样设置
<TextBlock Language="en-US"
           Text="{Binding Number,
                          ElementName=BoxPanelElement,
                          StringFormat={}{0:C}}"/>
但是,在尝试绑定此属性时,我得到一个奇怪的例外,
我可能会自己问一个关于此异常的问题
属性"语言"的绑定不能使用目标元素的语言进行转换; 如果需要文化,则必须在Binding上明确指定ConverterCulture.
根据Thomas Levesque的回答,这应该是可能的,所以也许我做错了什么.. WPF xml:lang /语言绑定
我开始工作的只是使用附加行为,而LanguageMyCulture更新后又会更新.
<TextBlock local:LanguageBehavior.Language="{Binding MyCulture}"
           Text="{Binding MyNumber,
                          ElementName=BoxPanelElement,
                          StringFormat={}{0:C}}"/>
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 
传递参数的语法是:
    Converter={StaticResource colorConverter}, ConverterParameter=GREEN}" 
您可能需要使用 ConverterParameter 将区域性作为字符串传递。
我同意 Meleak 的观点,不能将参数绑定到转换器。给了他+1。但我认为你可以用 MultiBinding 转换器来愚弄它。
    <TextBlock Name="textBox2" DataContext="{StaticResource NameListData}">
        <TextBlock.Text>
            <MultiBinding Converter="{StaticResource myCutlureConverter}"
              ConverterParameter="FormatLastFirst">
                  <Binding Path="InputValue"/>
                  <Binding Path="CultureTxt"/>
            </MultiBinding>
         </TextBlock.Text>
    </TextBlock>
| 归档时间: | 
 | 
| 查看次数: | 2891 次 | 
| 最近记录: |