2016-08-09 112 views
0

Bitte geben Sie das folgende XAML-Fragment betrachten:Sind in WPF Style Settern definierte Pinsel instanziiert, wenn der Stil verwendet wird?

<Style x:Key="CustomBorderStyle" TargetType="Border"> 
    <Setter Property="Background"> 
     <Setter.Value> 
      <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
       <GradientStop Color="#CCC" Offset="0.45"/> 
       <GradientStop Color="#444" Offset="0.8"/> 
      </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
</Style> 

Angenommen, den Stil in einer Anwendungsebene Ressourcenverzeichnis definiert ist. Wenn ein Steuerelement den Stil referenziert, instanziiert WPF jedes Mal eine neue Instanz der Klasse LinearGradientBrush? Oder wird eine einzige gemeinsame Instanz LinearGradientBrush verwendet, die verwendet wird?

Ich würde gerne wissen, ob es effizienter wäre, die LinearGradientBrush woanders zu definieren, und dann verweisen Sie es im Stil als statische Ressource.

Antwort

1

Es gibt nur eine Instanz dieses Stils und seiner konstituierenden Objekte.

+0

Danke. Sind Sie sicher, dass der Stil automatisch eingefroren wird? Es widerspricht https://msdn.microsoft.com/en-us/library/ms750509.aspx?f=255&MSPPError=-2147217396 "Aus Bequemlichkeit werden freezable Objekte ungefroren, es sei denn Sie frieren sie explizit ein." – Oliver

+0

@Oliver: In der Tat scheint nicht so zu sein. Vielleicht habe ich etwas vergessen, das mich einmal gebissen hat (ich habe versucht, etwas zu animieren, das implizit eingefroren wurde, aber ich kann mich nicht an alle Details erinnern). – Joey