2011-03-04 14 views
15

¿Cómo se puede establecer lo siguiente en el código?BasedOn = "{StaticResource {x: Type TextBox}}" en Code Behind for Style

<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}"> 

Estoy usando un tema combinado en App.xaml. Funciona muy bien para todos los controles, pero cuando defino un estilo para algo, p. TextBox, el estilo del tema no se recoge a menos que use BasedOn como en el ejemplo anterior, sino que obtiene el estilo predeterminado TextBox.

Ahora estoy creando un DataGridTextColumn en código detrás y no puedo llegar a la parte BasedOn a trabajar para el EditingElementStyle

Style editingStyle = new Style(typeof(TextBox)); 
editingStyle.BasedOn = ...?; 

¿Alguna sugerencia? Además, ¿hay alguna manera de obtener el estilo del tema en lugar del estilo predeterminado aplicado sin usar BasedOn?

Gracias

+0

Usted está tratando de conseguir el tema aplicado a un control determinado y tiene el estilo local anula los componentes del tema que se afecta? –

+0

@ Aaron: Estoy usando un tema que afecta a todos los controles. Pero en muchos lugares necesito agregar setters específicos, disparadores, etc. Enlazando 'ListBoxItem.IsSelected' en' ListBox' ItemContainerStyle por ejemplo. Quiero aplicar el estilo de tema con un setter adicional –

Respuesta

22

Prueba esto:

editingStyle.BasedOn = (Style) FindResource(typeof (TextBox)) 

Y QUE NO SE saber de qué manera c haga que aplique el estilo Tema sin especificar BasedOn. Si hay tal manera, me gustaría saberlo también ...

2

Esto debería funcionar:

Style baseStyle = new Style(typeof(TextBox)); 
Style editingStyle = new Style(typeof(TextBox)); 
editingStyle.BasedOn = baseStyle; 

También puede hacerlo en el constructor:

Style editingStyle = new Style(typeof(TextBox), baseStyle); 
+0

¡Gracias por tu respuesta! Sí, espero que funcione, pero el Estilo del tema no se recoge por alguna razón. Si lo hago en Xaml, funciona ... –

Cuestiones relacionadas