2009-12-23 12 views
6

Ho bisogno di impostare lo sfondo di un controllo sul colore dello sfondo del genitore in XAML. Perché non rendere semplicemente lo sfondo trasparente? È un pulsante con un'ombra esterna, quindi ho bisogno di impostare lo sfondo; altrimenti, l'ombra esterna viene visualizzata.XAML: priorità genitore

Quindi, dal markup del mio controllo, come si imposta la proprietà Background uguale a qualsiasi sfondo genitore (host)? Grazie per l'aiuto.

risposta

11

Si dovrebbe essere in grado di impostare il tramite rilegatura:

<Button Background="{Binding Path=Background, RelativeSource={RelativeSource Mode="FindAncestor" AncestorType="{x:Type Control}" AncestorLevel="1"}}" /> 

Dal fondo è definito per ogni "Control", questo dovrebbe prendere il controllo di un antenato l'albero, e usare il suo sfondo.


Un'altra opzione da considerare potrebbe essere quella di fare solo uno stile di pulsante che mostra lo sfondo trasparente, ma in realtà attira ancora l'ombra/bordo. Ciò consentirebbe di funzionare su qualsiasi UIElement.

+0

Questo punta al problema, tra l'altro: ovviamente, il genitore non è necessariamente un 'Control' (potrebbe essere qualsiasi a caso' UIElement'), e quindi non hanno bisogno avere una proprietà 'Background' in primo luogo. Ma non significa che in realtà non ne disegni uno ... –

+0

Beh, sfortunatamente, solo Control ha uno sfondo - quindi per legare allo sfondo del genitore, dovresti legare a un controllo. Ciò rende questo meno-perfetto, però. Modificherò con un'altra opzione ... –

8

Ho intenzione di lasciare la risposta di Reed come accettata, poiché risponde alla mia domanda originale. Ma ho scoperto che in realtà ho bisogno di legare alla finestra in cui è ospitato il pulsante. Ecco markup per farlo:

<Button Background="{Binding Path=Background, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}">My Button</Button> 
+0

+1 esattamente quello che stavo cercando. – BSalita