2010-01-27 13 views
8

Załóżmy, że mamy bardzo "XAML long" ControlTemplate dla naszego Control. I chcemy, aby dodać tylko 1 przycisk do szablonu. MSDN twierdzi, że "Nie można zastąpić tylko części drzewa wizualnego kontrolki". Czy naprawdę muszę skopiować cały ten ControlTemplate i dodać do niego mój przycisk?WPF ControlTemplate częściowe zastąpienie

Lub: Czy jest jakaś możliwość udostępnienia jakiegoś interfejsu do konkretnego elementu? Na przykład TextBox, aby każdy mógł go łatwo zhaczyć, bez konieczności ponownego narzucania całego ControlTemplate.

Dzięki!

+0

Dlaczego nie, oh, nie wiem ... dodać przycisk do szablonu? – Will

+0

Ponieważ rozwiązanie wykorzystuje tę kontrolę, a każdy projekt decyduje o tym, jakie przyciski dodać –

Odpowiedz

7

Jak powiedział qntmfred, nie można tego zrobić bezpośrednio. Jeśli jednak masz kontrolę, którą chcesz dostosować (co brzmi tak, jak robisz), możesz to zrobić, dodając odpowiednie właściwości dostosowywania, takie jak właściwość CustomButtons (którą każdy użytkownik kontrolki może dodać do własnych przycisków) lub właściwość ExtensionContent (którą każdy użytkownik kontrolki może ustawić na dowolną treść, którą chce - pozostawić pusty, dodać pojedynczą kontrolkę lub dodać panel z tylu rzeczy, ile chciał na nim). Twoja kontrolka ControlTemplate nie przypisywałaby żadnych właściwości semantycznych do tych właściwości, ale po prostu hostowała je tak, jak im to nadawano. Załóżmy na przykład, że podano właściwość ExtensionContent. Twój ControlTemplate mógłby przedstawić to za pomocą ContentPresenter:

<ContentPresenter ContentSource="ExtensionContent" /> 

a użytkownicy mogli umieścić cokolwiek chcieli w nim:

<s:StefansControl> 
    <s:StefansControl.ExtensionContent> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="I'm custom content" /> 
     <Button Click="DoSomethingSurprising_Click">Click me</Button> 
     <Image Source="something.jpg" /> 
    </StackPanel> 
    </s:StefansControl.ExtensionContent> 
</s:StefansControl> 

Innym ewentualnie jest zapewnienie właściwości styl, który można zastosować do części kontrolą tak użytkownicy mogą je stylizować (w tym zmienić szablon tej części (tylko) kontrolki) bez zastępowania całego stylu/szablonu. Jest to swego rodzaju pomysł "interfejsu do konkretnego elementu", np. dostarczyć właściwość FooBoxStyle, która zostanie zastosowana do "foo" TextBox.

Podsumowując, chodzi o stworzenie pewnej miary "częściowej wymiany" w szablonie bazowym - przy użyciu treści, stylów, szablonów lub ich kombinacji. WPF nie podaje ogólnego pojęcia "częściowej wymiany", ale można podać własne, konkretne pojęcie częściowej wymiany, o ile można przewidzieć, jakiego rodzaju częściowe zamienniki mogą być wymagane.

0

MSDN jest poprawny. Muszę skopiować cały ControlTemplate.

Powiązane problemy