Domanda

Ho un pennello che fa parte di un ResourceDictionary che viene fusa a Application.Resources.

Ma per qualche motivo non è risolto in fase di esecuzione quando uno stile viene applicato ad uno dei controlli. Tuttavia, se chiamo Application.Current.FindResource ( "BrushName") dalla finestra immediata al momento in cui viene lanciata un'eccezione, la risorsa è stata trovata.

Mi sto perdendo qualcosa? non dovrebbe WPF per provare a cercare la risorsa delle risorse del app?

Aggiorna L'applicazione è abbastanza grande, quindi non posso postare tutto il codice vero e proprio, ma qui è il modo in cui le risorse vengono uniti e utilizzati:

Brushes.xaml

<ResourceDictionary ...>
  <SolidColorBrush x:Key="BrushName" Color="#12345678" />
</ResourceDictionary>

SomeStyles.xaml

<ResourceDictionary ...>
  <Style x:Key="SomeStyle">
    <Setter Property="SomeProperty" Value="{StaticResource BrushName}" />
  </Style>
</ResourceDictionary>

App.xaml

<Application ...>
  <Application.Resources>

    <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Brushes.xaml" />
        <ResourceDictionary Source="SomeStyles.xaml" />
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>


  </Application.Resources>
</Application ...>

E poi un certo controllo potrebbe utilizzare lo stile utilizzando la risorsa in questo modo:

...
Style={StaticResource SomeStyle}
...

Aggiorna

Sembra accadere ai menu e ai controlli che vengono creati nel codice. Può essere collegato a tale controllo e non i menu che sono parti di struttura ad albero visuale di ogni finestra?

È stato utile?

Soluzione

Il dizionario SomeStyle.xaml deve fare riferimento direttamente dizionario Brushes.xaml, in questo modo:

<ResourceDictionary ...>
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="Brushes.xaml" />
  </ResourceDictionary.MergedDictionaries>
  <Style x:Key="SomeStyle">
    <Setter Property="SomeProperty" Value="{StaticResource BrushName}" />
  </Style>
</ResourceDictionary>

StaticResources cercare solo l'albero del dizionario corrente, quindi è necessario passare a tutte le risorse di cui ha bisogno per fare riferimento.

Altri suggerimenti

Stai usando DynamicResource in XAML annotare estensione?

Il tuo XAML dovrebbe essere {DynamicResource brushName} {non StaticResource brushName}

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