2011-08-04 16 views
21

¿Hay alguna forma de desactivar un estilo programáticamente?Desactivar estilo en WPF XAML?

A modo de ejemplo, que tienen un estilo que está vinculado a todos los cuadros de texto

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

me gustaría añadir algo de código para detener realmente los elementos de estilo que se utilizan, por lo que, básicamente, volviendo de nuevo al estilo de control predeterminado .

Necesito una forma de hacer un cambio en mis estilos, así que puedo cambiar entre el estilo predeterminado de Windows y mi estilo personalizado a través del código C#.

¿Hay alguna forma de hacerlo?

Gracias

Solución de Trabajo

Switching between themes in WPF

Respuesta

51

Para configurar el estilo por defecto,

En uso XAML,

<TextBox Style="{x:Null}" /> 

En C# usar,

myTextBox.Style = null; 

Si el estilo se debe establecer como null para recursos múltiples, vea CodeNaked's respuesta.


me siento, toda la información adicional debe estar en su pregunta y no en los comentarios. De todas formas, en código detrás Creo que esto es lo que está tratando de lograr:

Style myStyle = (Style)Application.Current.Resources["myStyleName"]; 

public void SetDefaultStyle() 
{ 
    if(Application.Current.Resources.Contains(typeof(TextBox))) 
     Application.Current.Resources.Remove(typeof(TextBox)); 

    Application.Current.Resources.Add(typeof(TextBox),  
             new Style() { TargetType = typeof(TextBox) }); 
} 

public void SetCustomStyle() 
{ 
    if (Application.Current.Resources.Contains(typeof(TextBox))) 
     Application.Current.Resources.Remove(typeof(TextBox)); 

    Application.Current.Resources.Add(typeof(TextBox), 
             myStyle); 
} 
+0

¿Qué tal si tuviera que cambiar el estilo de todos los cuadros de texto y luego poder cambiarlo de nuevo al st Yles utilizado antes de nuevo? –

+0

No creo que se adapte a lo que necesito. atm Tengo un estilo que está dirigido a todos los cuadros de texto. Me gustaría poder revertir cada cuadro de texto en el programa, alejándolo del estilo personalizado que configuré y hacerlo nulo para que pueda volver al Predeterminado de Windows. Y también tengo el código C# para cambiarlo a mi estilo personalizado. ¿cualquier posibilidad? Gracias –

+0

¿Esto es algo que está haciendo para probar su aplicación en el estilo predeterminado o es para implementar una función 'cambiar a estilo predeterminado' en su aplicación? Si está probando, simplemente configura el estilo nulo en XAML y quítalo más tarde. – loxxy

1

en XAML, puede anular esta estableciendo un estilo de forma explícita. En código subyacente, también puede establecer el estilo explícitamente.

<TextBox Style="{StaticResource SomeOtherStyle}"/> 

myTextBox.Style = Application.Resources["SomeOtherStyle"]; 
17

Usted podría inyectar un estilo en blanco que se anteponga a su otro estilo. De este modo:

<Window> 
    <Window.Resources> 
     <Style TargetType="TextBox"> 
      <Setter Property="Background" Value="Red" /> 
     </Style> 
    </Window.Resources> 
    <Grid> 
     <Grid.Resources> 
      <Style TargetType="TextBox" /> 
     </Grid.Resources> 
    </Grid> 
</Window> 

En el ejemplo anterior, sólo el estilo implícita de la cuadrícula se aplicaría a los cuadros de texto en la cuadrícula. Incluso se puede añadir esto a la cuadrícula mediante programación, algo así como:

this.grid.Resources.Add(typeof(TextBox), new Style() { TargetType = typeof(TextBox) }); 
+0

+1 para este. La 'respuesta' no no trabajo. – GameAlchemist

3

sé la respuesta ha sido aceptada, pero quiero añadir mi solución que funciona increíble en el siguiente escenario:

  • Uno aplicación principal utilizando mahapps.metro
  • proyecto adicional importado de la aplicación principal, sin hacer referencia a mahapps.metro, se importa como un plug-in (carga compilado .dll sobre la marcha)
  • utilizando los < Barras de herramientas> re-estilos todo para anular, por lo tanto, los estilos mahapps.metro no se están aplicando a los elementos dentro de la barra de herramientas.
  • usercontrol se utiliza para proporcionar controles personalizados a la aplicación principal.

en la raíz control de usuario configure los recursos:

<UserControl.Resources> 
    <Style x:Key="ButtonStyle" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}" /> 
    <Style x:Key="ComboBoxStyle" TargetType="ComboBox" BasedOn="{StaticResource {x:Type ComboBox}}" /> 
</UserControl.Resources> 

luego el código de barra de herramientas puede ser el siguiente

   <ToolBar> 
        Block Template: 
        <ComboBox Style="{StaticResource ComboBoxStyle}"/> 
        <Button Content="Generate!" Style="{StaticResource ButtonStyle}"/> 
       </ToolBar> 

esto se aplica con éxito el estilo principal de la aplicación de los controles dentro de la < ToolBar>

Cuestiones relacionadas