2010-03-27 36 views
7

Tôi cần tạo điều khiển để vẽ đường viền quanh con của nó. Vì vậy, tôi đã tạo lớp học và bắt nguồn từ Decorator:Lớp WPF Decorator có hữu ích không?

class RoundedBoxDecorator : Decorator 
{ 
    protected override Size ArrangeOverride(Size arrangeSize) 
    { 
     //some source 
    } 

    protected override void OnRender(DrawingContext dc) 
    { 
     //some source 
    } 
} 

Nó hoạt động tốt, nhưng tôi có một số nghi ngờ về việc sử dụng Decorator làm tổ tiên. Tôi đã tìm thấy trong MSDN rằng không có phương pháp hay đặc tính đặc biệt nào trong nó, chỉ bắt nguồn từ tổ tiên của nó (UIElement hoặc FrameworkElement). ArrangeOverride và OnRender cũng có nguồn gốc.

Vì vậy, điều gì cho lớp Decorator được thiết kế và sử dụng nó có ý nghĩa không? Hoặc tôi có thể lấy được từ FrameworkElement?

Trả lời

10

Bên cạnh những gì nó được thừa hưởng từ FrameworkElement, lớp Decorator thực hiện một tài sản Child (loại UIElement), cũng như thực hiện các giao diện IAddChild. Do đó Decorator là phần tử nguyên thủy nhất có thể chứa phần tử khác.

Có lý do nào khiến bạn không thể sử dụng phần tử Border (được kế thừa từ Decorator) để tạo đường viền quanh phần tử con không?

+0

Cảm ơn câu trả lời của bạn. Tôi cần một số biên giới đặc biệt, vì vậy tôi quyết định triển khai trang trí của riêng mình. – darja

+0

@darja Nếu nó là một biên giới tôi lấy được từ 'Biên giới', ít nhất là để làm cho sự lựa chọn ngữ nghĩa rõ ràng. Tôi không biết những gì bạn đang cố gắng để đạt được, nhưng 'RoundedBoxDecorator' âm thanh một chút giống như một workaround cho' Border.CornerRadius'. – grek40

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