Nie daj się złapać w moim przykładzie, po prostu wytrzymaj ze mną ze względu na pytanie:W WPF, w jaki sposób mogę zapobiec nadpisaniu mojego stylu?
W mojej aplikacji WPF, jeśli chciałem, aby wszystkie pola tekstowe miały "zielone" tło, łatwo byłoby ustawić to samo w moim Application.Resources.
<Style TargetType="TextBox">
<Setter Property="Background" Value="Green" />
</Style>
Działa doskonale ... (dziękuję WPF). Jednak gdybym miał gdzieś w mojej aplikacji TextBoxa, to chciałbym, aby dołączyło nieco więcej stylistyki do ... I LOSE moje zielone tło.
Przykład:
<TextBox>
<TextBox.Style>
<Style>
<Style.Triggers>
<Trigger Property="TextBox.IsMouseOver" Value="True">
<Setter Property="TextBox.Foreground" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
To TextBox będzie poprawnie mieć czerwoną Foreground gdy mysz jest skończona, ale zielonym tle jest kompletnie zagubiony.
Pytanie brzmi: jak mogę powiedzieć WPF NOT, aby całkowicie zniszczyć wszystkie stylizacje, które nadejdą z góry tylko dlatego, że mam prostą, nieuczestniczącą w konflikcie, oh tak mały styl dodany gdzieś do kontrolki?
To prawda, ale to w zasadzie jak mówią „trzeba ponownie dodaj style do wszystkiego, co chcesz zastąpić ". :(- Dobra odpowiedź, ale nienawidzę tego rozwiązania: –
Myślę o tym bardziej jako o stylu kaskadowym. Mogą istnieć miejsca, w których NIE chcesz dziedziczyć innych nadpisań stylu, lub gdy masz różne zestawy stylów dla ten sam rodzaj kontroli w różnych scenariuszach.W ten sposób daje większą kontrolę, więc nie przeszkadza mi to tak bardzo. –
@Tymothy, atrybut BasedOn oznacza rozszerzenie stylu z określonego typu, nawet w OOPS, gdy dziedziczysz klasę, technicznie rzecz biorąc poziom kompilacji ponownie dodajesz wszystkie funkcje klasy bazowej do nowej klasy Dziedziczenie oznacza zatrzymywanie/kopiowanie wszystkiego i przesłonięcie jakiejś części –