2009-12-22 13 views
5

W naszej pracy mamy kontrowersje, w których niektórzy ludzie chcą tworzyć kontrole użytkowników, które łączą często używane kontrolki, takie jak etykieta i pole tekstowe, lub etykieta i kontrola obrazu. Oznacza to, że coś takiego:Kiedy należy wyodrębnić UserControl w WPF

<StackPanel Orientation="Horizontal"> 
    <Image Source="/Someimage/Somewhere.gif"/> 
    <Label>Some text, hyperlink, or other content</Label> 
</StackPanel> 

i używać go tak jak to

<ImageLabel 
    HeaderImageSource="/Someimage/Somewhere.gif" 
> 
    Some text, hyperlink, or other content 
</ImageLabel> 

pytanie brzmi, czy są one zapewnienie wystarczającej hermetyzacji i abstrakcji do zasługują na osobną kontrolę użytkownika?

Odpowiedz

3

Tak, moim zdaniem jest to wystarczające, aby utworzyć oddzielną kontrolę użytkownika - jeśli stanowią one komponent logiczny w danym kontekście. W projekcie, nad którym pracuję, tworzymy kontrolki użytkownika, jeśli pogrupowaliśmy takie komponenty, które chcemy ponownie wykorzystać.

Główną korzyścią jest uzyskanie kontroli nad strukturą i stylem komponentu. Zastanów się, gdzie chcesz dokonać zmiany. Na przykład. dodaj obramowanie wokół obrazu lub dodaj jakiś styl do etykiety. Nie chcesz przeglądać kodu, aby znaleźć wszystkie wystąpienia powtarzającej się grupy elementów. Zamiast tego - chcesz zaktualizować tylko to jedno miejsce - mianowicie w odseparowanym składniku niestandardowym.

Kolejną zaletą jest to, że chcesz powiązać komponenty z tym samym obiektem. Następnie możesz powiązać swoją ImageLabel z obiektem, a twoje komponenty mogą wiązać się bezpośrednio z właściwościami w tym obiekcie w ładny i czysty sposób.

Uwaga: Zakładam, że rzeczywiście chcesz ponownie użyć tego komponentu i chcesz, aby był on ustrukturyzowany i stylizowany w ten sam sposób przez całą aplikację. Nigdy nie utworzyłbym kontroli użytkownika tak prostej, aby używać jej tylko raz.

+1

Czy stylów tego nie robi? –

+0

Tak, możesz używać stylów, aby upewnić się, że poszczególne komponenty wyglądają tak samo - ale musisz pamiętać, aby zaktualizować odniesienie do stylu dla każdego komponentu. Jeśli chcesz, aby wyglądały tak samo wszędzie, gdzie są używane - jako jeden komponent logiczny, powinieneś sprawić, że będzie to kontrola użytkownika. Jeśli np. zmień styl na swojej etykiecie, ale zapomnij zaktualizować go, gdy uzyskasz jedno wystąpienie tego "komponentu", który wygląda inaczej niż pozostałe. Uważam, że budowanie oddzielnych komponentów jest bardziej czyste. Ale znowu; jeśli w jakiś sposób są logicznie ze sobą powiązane. – stiank81

+0

Sterowanie jest proponowane jako ogólne rozwiązanie wszędzie tam, gdzie obraz musi być używany z etykietą –

2

Wygląda trochę przesadnie, aby utworzyć kontrolkę UserControl dla trzech elementów sterujących; Zastanowiłbym się, czy zaoszczędził mi czasu i wysiłku, a nie enkapsulacji/abstrakcji.

Powiązane problemy