2010-10-30 44 views
10

Tôi có một vấn đề nhỏ với định dạng hiện tại của số tiền âm của tôi. Đây là ảnh chụp màn hình tiếp tục tình trạng của tôi.Số đơn vị tiền tệ phủ định XAML

  1. Đây là cách tôi đang sử dụng StringFormat trong kết buộc của mình. (BTW, tôi chỉ cố gắng {0: C})
  2. Đúng như dự đoán
  3. Các thiết lập hiện tại của máy tính của tôi cho số tiền âm 4.
  4. Kết quả khi tôi đang chạy ứng dụng của tôi

alt text

Tại sao kết quả không phải là -0,08 $?

Bất kỳ ý tưởng nào về cách tôi nên tiến hành?

Cảm ơn thời gian của bạn.

UPDATE:

Tôi cố gắng để giải quyết vấn đề với bộ chuyển đổi, đây là kết quả:

  • tôi thấy rằng các Thread.CurrentThread.CurrentUICulture không phải là giống như Thread.CurrentThread.CurrentCulture, vì vậy tôi cố định nó trong App.xaml.cs. Thật không may, cùng một kết quả.
  • Tôi đã cố gắng hiển thị các giá trị của mình thông qua trình chuyển đổi để xem tôi có thể gỡ lỗi được không. Thực tế là văn hóa nhận được trong các tham số của phương pháp Convert là không sao, nhưng CurrentNegativePattern của nó không giống như trong Thread.CurrentThread.CurrentCulture. Đó có lẽ là lý do tại sao tôi có vấn đề này. cho thời điểm này, tôi sẽ sử dụng điều này: return ((double)value).ToString("C2", Thread.CurrentThread.CurrentCulture); trong phương thức Convert của trình chuyển đổi của tôi.
+0

+1 - Không chắc một trong hai, có lẽ bằng cách nào đó liên quan đến văn hóa sử dụng. Có lẽ một cách để xác định rằng trong XAML? http://shujaatsiddiqi.blogspot.com/2010/08/wpf-localization-stringformat-for.html cho thấy làm thế nào để buộc văn hóa hiện tại trong constructor cho cửa sổ - có thể cho rằng một shot cho mục đích gỡ lỗi. –

+0

+1 để ghi đè 'LanguageProperty'; không biết điều đó. –

+0

@ Morgan McDonald-Graham: Thật không may, đây không phải là chính xác những gì tôi đang tìm kiếm. Nhưng cảm ơn về tiền boa ! – esylvestre

Trả lời

1

Hãy thử thay đổi CurrentCulture-CurrentUICulture:

FrameworkElement.LanguageProperty.OverrideMetadata(
    typeof(FrameworkElement), 
    new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentUICulture.IetfLanguageTag)) 
); 

Xin lưu ý rằng mặc dù điều này có thể không sử dụng cài đặt trong khu vực của bạn. Đối tượng CultureInfo mô tả cài đặt vùng của bạn, nhưng những gì bạn đang làm với IetfLanguageTag là trích xuất đối tượng đó đến một nền văn hóa cụ thể. Văn hóa đó không có những điều chỉnh bạn đã thực hiện đối với cài đặt khu vực của bạn.

Ngoài ra, bạn có thể xem tùy chọn ConvertCulture của ràng buộc. Điều này thực sự mất một CultureInfo.

+0

Thật không may, nó không hoạt động. – esylvestre

+0

Đó là bởi vì bạn không có cách nào xác định cụ thể về văn hóa, và nó sử dụng các thiết lập chung của văn hóa. Tôi nghĩ cách duy nhất bạn có thể đạt được điều này là sử dụng thuộc tính 'ConverterCulture' của sự ràng buộc, nhưng tôi nghĩ rằng đây sẽ là một nỗi đau để áp dụng. Điều này thực sự có một 'CultureInfo', nhưng nó không dễ sử dụng. –

+0

Vì vậy, bạn nghĩ gì về giải pháp mà tôi hiện đang sử dụng (xem cập nhật trong bài đăng chính của tôi -Chúng tôi đang nói về một Trình chuyển đổi sử dụng CurrentThread.CurrentCulture-)? – esylvestre

Các vấn đề liên quan