Lý do điều này không hoạt động là thuộc Label.Contenttính thuộc loại Objectvà Binding.StringFormatchỉ được sử dụng khi liên kết với thuộc tính của loại String.
Điều gì đang xảy ra là:
- Các
Bindingbị đấm bốc của bạn MaxLevelOfInvestmentgiá trị và lưu trữ nó trở thành Label.Contenttài sản như một giá trị thập phân đóng hộp.
- Điều khiển Nhãn có một mẫu bao gồm a
ContentPresenter.
- Vì
ContentTemplatekhông được đặt, hãy ContentPresentertìm một DataTemplateđịnh nghĩa cho Decimalloại. Khi không tìm thấy, nó sử dụng một mẫu mặc định.
- Mẫu mặc định được các
ContentPresenterchuỗi trình bày sử dụng bằng cách sử dụng thuộc tính của nhãn ContentStringFormat.
Có thể có hai giải pháp:
- Sử dụng Label.ContentStringFormat thay vì Binding.StringFormat, hoặc
- Sử dụng thuộc tính String như TextBlock.Text thay vì Label.Content
Đây là cách sử dụng Label.ContentStringFormat:
<Label Content="{Binding Path=MaxLevelofInvestment}" ContentStringFormat="Amount is {0}" />
Đây là cách sử dụng TextBlock:
<TextBlock Text="{Binding Path=MaxLevelofInvestment, StringFormat='Amount is {0}'}" />
Lưu ý: Để đơn giản hơn, tôi đã bỏ qua một chi tiết trong phần giải thích ở trên: Thực ContentPresentersự sử dụng thuộc tính Templatevà của riêng nó StringFormat, nhưng trong quá trình tải, chúng tự động bị ràng buộc bởi mẫu với các thuộc tính ContentTemplatevà ContentStringFormatcủa Label, vì vậy có vẻ như ContentPresenterthực sự đang sử dụng Labelthuộc tính của .