[英]Set culture with additional settings in WPF
我正在嘗試將我當前的文化(具有自定義十進制符號)傳遞給 WPF,以便它會根據我在 Windows 中的區域和語言設置顯示綁定值。
我的研究總是以類似於this的解決方案結束,它傳遞語言標簽,但沒有任何其他設置(如十進制符號)。
如何強制 WPF 使用整個當前文化而不僅僅是默認語言設置?
關於可能的解決方法的問題:
我可以以某種方式將當前文化傳遞給 WPF 使用的默認值轉換器嗎? 或者可能覆蓋它們?
有幾個選擇。 也許最簡單的方法是將要數據綁定的值包裝到 screen 並為它們調用 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"/>
這樣,您將根據計算機的文化設置自動獲取格式:
另一種選擇是使用此處介紹的方法: 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"/>
之后,您應該會看到所需的輸出:
using System;
using System.Globalization;
using System.Threading;
using System.Windows;
using System.Windows.Markup;
namespace WPF_CultureExample
{
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("tr-TR");
var currentCulture = Thread.CurrentThread.CurrentCulture.Name;
var ci = new CultureInfo(currentCulture)
{
NumberFormat = { NumberDecimalSeparator = "," },
DateTimeFormat = { DateSeparator = "." }
};
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
base.OnStartup(e);
}
}
}
您可以在 App.xaml 文件的后端代碼中重新編碼 OnStartup() 方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.