Changement de XAML style dynamiquement dans le Code Derrière, de sorte que les contrôles de l'application de ce style aussi tenir compte de la modification

Je veux être en mesure de définir des propriétés de style (et les valeurs) de l' .cs fichier dans ma fenêtre WPF.

Mon problème est que si j'ai 30 rectangles, tous de qui je veux avoir le même style (et je ne veux pas de mise à jour de chacun d'entre eux individuellement). J'aimerais les avoir tous ensemble (dans le fichier xaml) dans le même style, et ensuite mettre à jour le style de regarder la façon dont je le voudrais.

Dire que j'ai mis le Style = "key1" dans le code Xaml pour chaque rectangle. Alors je veux être en mesure de modifier "key1" plus tard, de sorte que tous les rectangles va refléter ce changement.

J'ai essayé en App.xaml

<Application.Resources>
    <Style x:Key="key1" TargetType="Rectangle">
        <Setter Property="Fill" Value="Red"/>
    </Style>
</Application.Resources>

Dans MainwWindows.xaml

<StackPanel>
    <Rectangle Style="{StaticResource key1}" Height="200" Width="200" x:Name="rect1"/>
    <Button Click="Button_Click" Content="Click"/>
</StackPanel>

Dans le code derrière

private void Button_Click(object sender, RoutedEventArgs e)
{
    Style style = Application.Current.Resources["key1"] as Style;
    style.Setters.Add(new Setter(Rectangle.VisibilityProperty, Visibility.Collapsed));
}

Cette mise à jour du style, mais ne mettez pas à jour les rectangles.

Est-ce possible? Personne ne sait comment faire cela? (Un exemple serait grandement apprécié).

Je pense que vous devez appeler Update() ou Refresh() méthodes sur des éléments de l'INTERFACE utilisateur (Fenêtre ou un Rectangle). l'essayer, peut-être cela peut vous aider.

OriginalL'auteur Nikhil Agrawal | 2012-04-27