2010-04-20 7 views
12

I tienen una WPF ResourceDictionary con la siguiente TextBlock:¿Cuál es el alcance de StaticResource dentro de un WPF ResourceDictionary?

<TextBlock Visibility="{Binding Converter={StaticResource MyBoolProp ResourceKey=BoolToVis}}"> 
</TextBlock> 

El ResourceDictionary está incluido en App.xaml bajo MergedDictionaries:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="MyResourceDictionary.xaml"/> 

Dentro del App.xaml he definido el convertidor BoolToVis (de nuevo , bajo Application.Resources)

<BooleanToVisibilityConverter x:Key="BoolToVis" /> 

cuando comienzo mi aplicación arriba - me sale el siguiente XamlParseExcep ción:

"proporcionan un valor de 'System.Windows.Markup.StaticResourceHolder' inició una excepción."

El InnerException es:

"No se puede encontrar el recurso llamado 'BoolToVis' nombres de los recursos entre mayúsculas y minúsculas.".

Puedo hacer referencia a este convertidor directamente con App.xaml (de hecho, la declaración XAML particular es idéntica) y dentro de otros UserControls sin problemas.

Este código en particular también funcionó bien bajo .NET 4.0 RC (y Beta2). Este error solo comenzó a suceder cuando actualicé a .NET 4.0 RTM.

soy capaz de trabajar alrededor de ella al declarar otra BooleanToVisibilityConverter dentro MyResourceDictionary.xaml y refiriéndose a ella como tal:

<TextBlock Visibility="{Binding Converter={StaticResource MyBoolProp ResourceKey=BoolToVis2}}"> 
</TextBlock> 

Cualquier razón para que yo tenga que hacer esto?

Respuesta

8

por MSDN:

recursos en un diccionario fusionada ocupan un lugar en el ámbito de búsqueda de recursos que se encuentra justo después del alcance del diccionario principal recurso que se fusionan en.

Los recursos definidos en App.xaml no se pueden ver en un ResourceDictionary combinado. Creo que tiene más sentido definir un convertidor utilizado en un ResourceDictionary en el ResourceDictionary en sí, u otro ResourceDictionary que alberga todos sus convertidores.

+1

Probablemente tomaremos la segunda ruta. Lo que es tan extraño es que este código funcionó bien en el RC, pero no en el RTM. Nuestro equipo de desarrollo está "mezclado" en cuanto a quién tiene qué versión. Como uno de los primeros en adoptar, dibujé la paja corta :). Gracias! –

Cuestiones relacionadas