2011-08-16 30 views
6

Tôi có thể khai báo số nguyên hoặc giá trị kép trong xaml. Tuy nhiên, tôi không thể thêm giá trị thập phân. Nó xây dựng ok, nhưng sau đó tôi nhận được:Làm thế nào để khai báo một giá trị thập phân trong XAML?

System.Windows.Markup.XamlParseException: Loại 'thập phân' không phải là được tìm thấy.

Dưới đây là các mã XAML:

<UserControl.Resources> 
    <system:Int32 x:Key="AnIntValue">1000</system:Int32><!--Works!--> 
    <system:Double x:Key="ADoubleValue">1000.0</system:Double><!--Works!--> 
    <system:Decimal x:Key="ADecimalValue">1000.0</system:Decimal><!--Fails at runtime--> 
</UserControl.Resources> 

Đây là cách tôi đang tuyên bố không gian tên hệ thống:

xmlns:system="clr-namespace:System;assembly=mscorlib" 

Edit: Cách giải quyết: Như Steven nói, thêm các nguồn lực thông qua code-behind có vẻ hoạt động tốt:

Resources.Add("ADecimalValue", new Decimal(1000.0)); 

Chỉnh sửa: Trả lời: Làm chính xác điều tương tự trong WPF có vẻ hoạt động tốt. Vì vậy, tôi đoán đây là một hạn chế bạc mờ ẩn. Nhờ Steven cho phát hiện này.

+0

Bạn tr ying để sử dụng tài nguyên này trong xaml? –

+0

Tôi sử dụng nó trong một tham số chuyển đổi cho một ràng buộc. Tôi tham khảo nó như một nguồn tài nguyên tĩnh. – alf

Trả lời

2

Tôi đã xác nhận phát hiện của bạn rằng loại thập phân không xuất hiện để hoạt động như một tài nguyên tĩnh trong phần tài nguyên của UserControl. Tuy nhiên tôi thấy một vài cách giải quyết đã được thảo luận ở đây trên StackOverflow, và rằng tôi đã chỉ đích thân xác nhận để làm việc với kiểu Decimal trong Silverlight: Access codebehind variable in XAML

Các cách giải quyết bao gồm:

  • thêm các tài nguyên từ đoạn mã phía sau (xem liên kết ở trên)
  • Tham chiếu thuộc tính trong mã phía sau bằng cách sử dụng loại liên kết "tên phần tử"
  • Truy cập thuộc tính Thập phân công khai trên người dùng kiểm soát thuộc tính ngữ cảnh dữ liệu.

Cách giải quyết thứ hai có thể được thực hiện như thế này:

<sdk:Label Name="label1" Content="{Binding ElementName=root, Path=DecimalProperty}" /> 

... nơi thẻ usercontrol gốc được định nghĩa như thế này (ý tưởng này là từ liên kết ở trên cũng):

<UserControl x:Class="SilverlightDecimal.MainPage" x:Name="root" .... > 

và số này nằm trong mã sau của người dùng của bạn:

public decimal DecimalProperty 
{ 
    get 
    { 
     ... 
    } 
    set 
    { 
     ... 
    } 
} 
+0

Cảm ơn! Cách giải quyết đầu tiên thực sự hiệu quả. Bây giờ tôi đang tìm một lời giải thích về lý do tại sao tôi không thể khai báo tài nguyên trong XAML. – alf

+1

Tôi rất vui khi được giải quyết. Google dường như không có câu trả lời và tôi bắt đầu tự hỏi nếu đó là một lỗi. Từ thông tin tôi đã thấy, kiểu thập phân được chứa trong mscorlib.dll được tự động tham chiếu bởi các dự án Silverlight. Làm trước/sau xây dựng các sự kiện để tự đảm bảo rằng dll đã được trong thư mục đầu ra xây dựng cũng không giúp đỡ. –

+1

Tôi đã tạo ra một dự án WPF xương trần và nó hoàn toàn hài lòng với Decimal như một nguồn tài nguyên tĩnh, thật kỳ lạ. –

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