Qual è la differenza tra StaticResources e DynamicResources in WPF?
-
07-07-2019 - |
Domanda
Qual è la differenza tra StaticResources e DynamicResources in WPF?
MODIFICA: Questo codice nel file XAML:
<ComboBox Canvas.Left="14" Style="{StaticResource ComboBoxStyle}"
Canvas.Top="137" Height="33" Name="cmbItem" Width="170"
SelectionChanged="cmbItem_SelectionChanged">
<ComboBoxItem>Name</ComboBoxItem>
<ComboBoxItem>Age</ComboBoxItem>
</ComboBox>
il codice seguente si trova nel file del dizionario delle risorse
<Style x:Key="ComboBoxStyle" TargetType="{x:Type ComboBox}">
<Setter Property="FocusVisualStyle" Value="{StaticResource ComboBoxFocusVisual}"/>
<Setter Property="Foreground" Value="#FF436B13"/>
</Style>
Soluzione
Le risorse dinamiche vengono valutate quando le si utilizza. Le risorse statiche vengono valutate al momento del caricamento.
Da MSDN :
Quando usi un'estensione di markup, tu in genere fornire uno o più parametri in forma di stringa che sono elaborato da quel particolare markup estensione, anziché essere valutata nel contesto dell'essere proprietà impostato. Il markup delle risorse statiche L'estensione elabora una chiave cercando il valore per quella chiave in tutto dizionari di risorse disponibili. Questo accade durante il caricamento, che è il file punto nel tempo in cui il processo di caricamento deve assegnare il valore della proprietà che accetta la risorsa statica riferimento. Il markup DynamicResource L'estensione invece elabora una chiave di creando un'espressione e quella l'espressione rimane sottovalutata fino al l'applicazione viene effettivamente eseguita, a a che ora viene valutata l'espressione e fornisce un valore.
Ci sono molti più dettagli su quando dovresti scegliere quale opzione.
Altri suggerimenti
Dal tuo commento sotto la risposta di Jon:
Ricevo questo errore " Impossibile trovare la risorsa denominata '{ComboBoxFocusVisual}'. I nomi delle risorse fanno distinzione tra maiuscole e minuscole. Errore nell'oggetto "cmbItem" nel file di markup "
Penso che la tua risorsa ComboBoxFocusVisual sia dichiarata dopo ComboBoxStyle, quindi l'estensione StaticResource
non la trova. Dovresti dichiararlo prima di fare riferimento a esso o fare riferimento a un'estensione DynamicResource