2011-07-05 36 views

Trả lời

6

TypeConverters được sử dụng để ngầm chuyển đổi một loại khác là gì là gì. Ví dụ: BrushConverter có thể chuyển đổi chuỗi "Đỏ" thành một SolidColorBrush có thuộc tính Màu được đặt thành màu đỏ. Như trong trường hợp này:

<Button Background="Red" /> 

MarkupExtension cho phép bạn cung cấp nhiều giá trị tùy chỉnh hơn cho thuộc tính. Ngoài ra còn có một vài phần mở rộng đánh dấu đặc biệt, Binding, MultiBinding và DynamicResource. Chúng làm nhiều hơn là chỉ cung cấp một giá trị tĩnh và thay vào đó cung cấp một giá trị động hơn.

Vì vậy, bạn có thể xây dựng tiện ích mở rộng đánh dấu thực hiện các thao tác giống như trình chuyển đổi loại, nhưng sau đó bạn sẽ phải sử dụng chúng một cách rõ ràng, so với bản chất của trình chuyển đổi loại.

1

A TypeConverter được thiết kế để chuyển đổi từ loại này sang loại khác. Có một số hộp được cung cấp ngoài hộp như BrushConverter, ColorConverter, BooleanConverter v.v. Xem here để biết danh sách đầy đủ. Có gì là tuyệt vời về loại bộ chuyển đổi là chúng có thể được áp dụng cho một định nghĩa bất động sản bằng cách sử dụng định nghĩa atttribute sau trong định nghĩa lớp ...

[TypeConverterAttribute(typeof(BrushConverter)] 
public Brush Background 
{ 
    ... 
} 

... thi hành BrushConverter biết rằng nếu nó nhận được một chuỗi như đầu vào nó nên cố gắng và chuyển đổi nó thành một thể hiện SolidBrush màu đã biết. Điều này có nghĩa là XAML của bạn không cần gán một tham chiếu SolidBrushes.Red thực tế cho thuộc tính mà thay vào đó sử dụng một chuỗi đơn giản ...

<Button Background="Red" /> 

... viết nhanh và dễ hiểu hơn. Tuy nhiên, TypeConverter là ALWAYS được gọi để gán thuộc tính và bạn không thể ngăn XAML gây ra TypeConverter được gọi.

A MarkupExtension được sử dụng để trả về một đối tượng sau đó được gán cho thuộc tính đã chỉ định. Điều này linh hoạt hơn vì bạn có thể quyết định thời gian và địa điểm sử dụng MarkupExtension và bạn không bị giới hạn đối với các thuộc tính cụ thể đã được đánh dấu trước bằng thuộc tính. Ví dụ về extesions đánh dấu là Binding, StaticResource và DynamicResource.

Vì vậy, trình chuyển đổi loại là rất tốt cho các thuộc tính cụ thể của một loại cụ thể mà bạn muốn chấp nhận một phạm vi giá trị lớn hơn so với loại chính nó xác định. Tiện ích đánh dấu tuyệt vời cho mục đích sử dụng đa mục đích hơn khi nhà phát triển quyết định thời điểm và địa điểm sử dụng nó

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