Est-il possible de désactiver un style par programmation?
Par exemple, j'ai un style qui est lié à toutes les zones de texte
<Style TargetType="{x:Type TextBox}">
Je voudrais ajouter un peu de code pour arrêter réellement les éléments de style utilisés, donc en gros, revenir au style de contrôle par défaut.
J'ai besoin d'un moyen de faire un changement dans mes styles, donc je peux basculer entre le style par défaut de Windows et mon style personnalisé via le code C #.
Y a-t-il un moyen de faire ça?
Merci
Solution de travail
Pour définir le style par défaut,
En utilisation XAMl,
<TextBox Style="{x:Null}" />
En utilisation C #,
myTextBox.Style = null;
Si le style doit être défini sur null pour plusieurs ressources, voir la réponse CodeNaked.
Je pense que toutes les informations supplémentaires devraient être dans votre question et non dans les commentaires. Quoi qu'il en soit, dans le code Derrière, je pense que c'est ce que vous essayez d'atteindre:
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);
}
Vous pouvez injecter un style vierge qui aurait priorité sur votre autre style. Ainsi:
<Window>
<Window.Resources>
<Style TargetType="TextBox">
<Setter Property="Background" Value="Red" />
</Style>
</Window.Resources>
<Grid>
<Grid.Resources>
<Style TargetType="TextBox" />
</Grid.Resources>
</Grid>
</Window>
Dans l'exemple ci-dessus, seul le style implicite de la grille serait appliqué aux zones de texte de la grille. Vous pouvez même ajouter ceci à la grille par programme, quelque chose comme:
this.grid.Resources.Add(typeof(TextBox), new Style() { TargetType = typeof(TextBox) });
Je sais que la réponse a été acceptée, mais je veux ajouter ma solution qui fonctionne très bien dans le scénario suivant:
dans la racine de contrôle utilisateur, définissez les ressources:
<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>
alors le code de la barre d'outils peut être le suivant
<ToolBar>
Block Template:
<ComboBox Style="{StaticResource ComboBoxStyle}"/>
<Button Content="Generate!" Style="{StaticResource ButtonStyle}"/>
</ToolBar>
cela applique avec succès le style d'application principal aux contrôles à l'intérieur de la <barre d'outils>
Dans Xaml, vous pouvez remplacer cela en définissant un style explicitement. En code-behind, vous pouvez également définir le style explicitement.
<TextBox Style="{StaticResource SomeOtherStyle}"/>
myTextBox.Style = Application.Resources["SomeOtherStyle"];