prega di non farsi prendere nel mio esempio, basta portare con me per il bene della questione:In WPF, come posso evitare di sovrascrivere il mio stile?
Nella mia applicazione WPF, se volevo tutti TextBoxes avere uno sfondo "verde", mi sarebbe facilmente impostare come tale nel mio Application.Resources.
<Style TargetType="TextBox">
<Setter Property="Background" Value="Green" />
</Style>
Questo funziona PERFETTAMENTE ... (grazie WPF). Tuttavia, se avessi un TextBox da qualche parte nella mia applicazione che volevo aggiungere un po 'più di stile a ... I PERDONO il mio sfondo verde.
Esempio:
<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>
Che TextBox sarà correttamente hanno il primo piano rosso quando il mouse è sopra, ma lo sfondo verde è completamente persa.
Quindi, la domanda è: come faccio a dire a WPF di non cancellare completamente tutti gli stili che provengono da sopra solo perché ho uno stile semplice, non conflittuale, così piccolo aggiunto ad un controllo da qualche parte?
Vero, ma è fondamentalmente come dire "devi ri-aggiungere stili a tutto ciò che vuoi sovrascrivere ". :(- Buona risposta, ma odio quella soluzione –
Penso che sia più una cosa a cascata, ci possono essere luoghi in cui NON vuoi ereditare le sostituzioni di altri stili o dove hai diversi set di stili per lo stesso tipo di controllo in diversi scenari.Questo modo ti dà più controllo, quindi non mi dispiace tanto. –
@Timothy, attributo BasedOn significa estendere lo stile dal tipo specificato, anche in OOPS ogni volta che si eredita una classe, tecnicamente a livello di compilazione riattivi tutte le funzionalità della classe base in una nuova classe. L'ereditarietà significa conservare/copiare tutto e sovrascrivere alcune parti. –