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>
È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top