2010-03-27 14 views
7

Ho bisogno di creare il controllo per disegnare il confine attorno al suo bambino. Così, ho creato classe derivata da Decorator:La classe WPF Decorator è utile?

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

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

Funziona bene, ma ho qualche dubbio sull'utilizzo Decorator come antenato. Ho trovato in MSDN che non ci sono metodi o proprietà speciali in esso, solo derivati ​​dai suoi antenati (UIElement o FrameworkElement). ArrangeOverride e OnRender sono anch'essi derivati.

Quindi, per la classe Decorator è stato progettato e ha senso utilizzarlo? Oppure posso derivare da FrameworkElement?

risposta

10

Oltre a quanto eredita da FrameworkElement, classe Decorator implementa una proprietà Child (di tipo UIElement), nonché implementando l'interfaccia IAddChild. Pertanto, Decorator è l'elemento più primitivo che può contenere un altro elemento.

C'è un motivo per cui non è stato possibile utilizzare un elemento Border (che eredita da Decorator) per creare il bordo attorno all'elemento figlio?

+0

Grazie per la risposta. Ho bisogno di un bordo speciale, quindi ho deciso di implementare il mio decoratore. – darja

+0

@darja Se è un confine, deriverei da "Border", almeno per rendere chiara la scelta semantica. Non so cosa stai cercando di ottenere, ma 'RoundedBoxDecorator' sembra un po 'una soluzione per' Border.CornerRadius'. – grek40