none
StaticResource : Change notification RRS feed

  • Question

  •  

    Bonjour, 

     

    Je travaille actuellement la certification 70-511 et je n'arrive pas à saisir la différence entre un dynamicResource et un staticResource. Plus précisément au niveau du système de notifications de changement. 

     

    Voici une des questions de la Lesson Review du Self Paced Training Kit Exam qui me pose problème:

    Look at the following XAML:

     

    <Window x:Class="Window1"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      Title="Window1" Height="300" Width="300"> 
      <Window.Resources> 
       <SolidColorBrush Color="Red" x:Key="ForegroundBrush" /> 
       <SolidColorBrush Color="Blue" x:Key="BackgroundBrush" /> 
      </Window.Resources> 
      <Grid> 
       <Button Background="{StaticResource BackgroundBrush}" 
         Foreground="{DynamicResource ForegroundBrush}" Height="23" 
         Margin="111,104,92,0" Name="Button1" 
         VerticalAlignment="Top">Button</Button> 
      </Grid> 
    </Window>
    

     


    What happens to the colors of the button when the following code is executed?

    Sample of C# Code 

     

    SolidColorBrush aBrush = new SolidColorBrush(Colors.Green);
    this.Resources["ForegroundBrush"] = aBrush; 
    SolidColorBrush bBrush; 
    bBrush = (SolidColorBrush)this.Resources["BackgroundBrush"]; 
    bBrush.Color = Colors.Black;
    

    A.  Nothing happens.

    B.  The background turns black.

    C.  The foreground turns green.

    D.  Both B and C.

     

    La réponse est : 

    D.  Correct: Because the foreground is bound to the resource as a dynamic resource, it detects when the resource changes, and the foreground turns green. Also, because the background is bound as a static resource and a property on the brush that paints the background is changed, the resource detects that change through change notification, and the background turns black.

     

    Je ne comprends pas pourquoi le background devient noir.

    Quand est-ce que se déclenche le fameux "change notification" et quand est-ce qu'il ne se déclenche pas ?

    J'ai lu le lien suivant sur les ressources mais cela ne m'a guère apporté de réponse.

    http://msdn.microsoft.com/fr-fr/library/ms750613.aspx

     

    Je vous remercie d'avance pour vos réponses.

     

     

    dimanche 24 juillet 2011 15:24

Réponses

  • dans ce cas la l'arrière plan ne sera pas modifié :

    SolidColorBrush aBrush = new SolidColorBrush(Colors.Green);
          this.Resources["ForegroundBrush"] = aBrush;
          SolidColorBrush bBrush = new SolidColorBrush(Colors.Black);
          this.Resources["BackgroundBrush"] = bBrush;
    


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue.
    • Marqué comme réponse Yohan D dimanche 24 juillet 2011 16:28
    dimanche 24 juillet 2011 16:18
    Modérateur

Toutes les réponses

  • Bonjour,

    il est vrai que c'est pas évident au premier abord.

    Pour moi ce n'est que mon point de vue, le background devient noir, car on récupère le brush de la resource et change une de ces propriétés.

    Donc le brush est notifié du changement de couleur.

    C'est la seule différence que je vois avec le foreground qui lui est dynamicResource te donc on peux changer directement le brush sans problème.


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue.
    dimanche 24 juillet 2011 15:39
    Modérateur
  • Oui mais à ce moment là y-a t'il un cas où l'on peut modifier la ressource statique BackgroundBrush sans que l'arrière plan du bouton ne soit modifié ? 
    dimanche 24 juillet 2011 15:45
  • dans ce cas la l'arrière plan ne sera pas modifié :

    SolidColorBrush aBrush = new SolidColorBrush(Colors.Green);
          this.Resources["ForegroundBrush"] = aBrush;
          SolidColorBrush bBrush = new SolidColorBrush(Colors.Black);
          this.Resources["BackgroundBrush"] = bBrush;
    


    Cordialement, Pascal.

    Développeur Wpf/SilverLight/WinPhone7

    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue.
    • Marqué comme réponse Yohan D dimanche 24 juillet 2011 16:28
    dimanche 24 juillet 2011 16:18
    Modérateur
  • Ah je comprends mieux maintenant.

    Donc si je résume, le change notification se produit lorsqu'une propriété de la ressource est modifiée mais pas lorsque la ressource elle-même est changée. 

     

    Merci pour vos réponses.

    dimanche 24 juillet 2011 16:32