Di WPF 3.5SP1 saya menggunakan fitur terakhir StringFormat di DataBindings:
<TextBlock Text="{Binding Path=Model.SelectedNoteBook.OriginalDate, StringFormat='f'}"
FontSize="20" TextTrimming="CharacterEllipsis" />
Masalah yang saya hadapi adalah tanggal selalu diformat dalam bahasa Inggris ... meskipun sistem saya dalam bahasa Prancis? Bagaimana saya bisa memaksa tanggal untuk mengikuti tanggal sistem?
wpf
datetime
localization
Pavel Anikhouski
sumber
sumber
Jawaban:
Dari Membuat Wizard Internasionalisasi di WPF
sumber
Tentukan namespace xml berikut:
Sekarang lihatlah perbaikan fantastis ini:
Saya sangat sadar ini bukan perbaikan global dan Anda akan membutuhkannya di setiap Bindings Anda, tetapi tentunya itu hanya XAML yang bagus? Sejauh yang saya ketahui, saat berikutnya pembaruan yang mengikat itu akan menggunakan yang benar
CultureInfo.CurrentCulture
atau apa pun yang Anda berikan.Solusi ini akan segera memperbarui Bindings Anda dengan nilai yang benar tetapi sepertinya banyak kode untuk sesuatu yang sangat langka dan tidak berbahaya.
sumber
Saya hanya ingin menambahkan bahwa jawaban loraderon bekerja dengan baik dalam banyak kasus. Ketika saya meletakkan baris kode berikut di App.xaml.cs saya, tanggal di TextBlocks saya diformat dalam budaya yang benar.
Saya mengatakan 'kebanyakan kasus'. Misalnya, ini akan berhasil di luar kotak:
... tetapi saat menggunakan Run di TextBlock, DateTime diformat dalam budaya default.
Agar ini berhasil, saya membutuhkan jawaban Gusdor , yaitu menambahkan ConverterCulture = {x: Static gl: CultureInfo.CurrentCulture} ke Binding.
Saya berharap jawaban tambahan ini akan berguna bagi seseorang.
sumber
Cukup masukkan pintasan budaya ke tag tingkat atas:
misalnya:
sumber
DatePicker
untuk melakukan tugasnya, jadi perbaikan mudah ini didapat saya cepat kembali ke jalur!Seperti yang telah disebutkan, XAML default ke budaya invarian (en-US), dan Anda dapat menggunakan
untuk mengatur budaya ke budaya default untuk bahasa budaya saat ini. Tapi komentar itu salah; ini tidak menggunakan budaya saat ini, karena Anda tidak akan melihat penyesuaian apa pun yang mungkin dibuat pengguna, itu akan selalu menjadi default untuk bahasa tersebut.
Untuk benar-benar menggunakan budaya saat ini dengan kustomisasi, Anda perlu mengatur
ConverterCulture
bersama denganStringFormat
, seperti padadengan yang
gl
ditentukan sebagai namespace global di elemen root Andasumber
binding.ConverterCulture = System.Globalization.CultureInfo.CurrentCulture;
Jika Anda perlu mengubah bahasa saat program berjalan, Anda bisa mengubah properti Bahasa pada elemen root Anda (saya tidak yakin apakah ini memiliki efek instan atau jika sub elemen harus dibuat ulang, dalam kasus saya ini setidaknya berfungsi)
sumber
Kode lengkap untuk mengganti pelokalan juga dalam elemen seperti
<Run />
ini:sumber
Jika Anda ingin mengubah info budaya saat runtime, Anda dapat menggunakan perilaku (lihat di bawah)
sumber
Jika Anda mengerjakan kode daripada XAML, Anda dapat mengatur ConverterCulture sebagai berikut:
Kudos to @KZeise karena menunjukkan perbedaan halus antara menggunakan definisi budaya default dan menggunakan definisi budaya kustom pengguna.
sumber
Gunakan Label (termasuk Cultture) dan bukan texblock
sumber