首页 文章

使用WPF中的其他设置设置区域性

提问于
浏览
0

我正在尝试将我当前的文化(具有自定义小数符号)传递给WPF,以便它将根据我在Windows中的区域和语言设置显示绑定值 .

我的研究总是以类似于this的解决方案结束,该解决方案传递语言标记,但没有任何其他设置(如小数点符号) .

如何强制WPF使用整个当前文化,而不仅仅是默认语言设置?

关于可能的解决方法的问题:

我可以以某种方式将当前文化传递给WPF使用的默认值转换器吗?或者可能覆盖它们?

1 回答

  • 1

    有几种选择 . 也许最简单的方法是将你想要数据绑定的值包装到屏幕并为它们调用ToString . 例如,如果您有:

    public decimal Value
        {
            get { return this.value; }
            set
            {
                if (value == this.value) return;
                this.value = value;
                OnPropertyChanged();
            }
        }
    

    将它包装在ViewModel中,如下所示:

    public decimal Value
        {
            get { return this.value; }
            set
            {
                if (value == this.value) return;
                this.value = value;
                OnPropertyChanged("ValueString");
            }
        }
    
        public string ValueString
        {
            get { return this.value.ToString(CultureInfo.CurrentCulture); }
        }
    

    并将您的UI绑定到这个新属性:

    <TextBlock x:Name="Result" Text="{Binding ValueString}" Grid.Row="0"/>
    

    这样,您将根据计算机的文化设置自动获取格式:

    Decimal formatting WPF binding culture

    另一种方法是使用此处介绍的方法:https://stackoverflow.com/a/19796279/66988

    所以你需要一个自定义的Binding类:

    public class CultureAwareBinding : Binding
    {
        public CultureAwareBinding(string path)
            : base(path)
        {
            ConverterCulture = CultureInfo.CurrentCulture;
        }
    }
    

    然后你必须在你的XAML中使用它:

    <TextBlock x:Name="Result" Text="{wpfApplication9:CultureAwareBinding Value}" Grid.Row="0"/>
    

    之后你应该看到所需的输出:

    Culture converter binding WPF

相关问题