2012-04-30 20 views
13

Cómo especificar la etiqueta BasedOn en un estilo a un estilo definido en algún otro archivo.Herencia de estilo basada en XAML diferente

ejemplo,

Dictionary1.xaml define

<Style x:Key="basicStyle" TargetType="TextBlock" > 
     <Setter Property="FontSize" Value="24"></Setter> 
     <Setter Property="Foreground" Value="DarkGray"></Setter> 
     <Setter Property="FontWeight" Value="Bold"></Setter> 
    </Style> 

En Dictionary2.xaml necesito algo así como

<Style x:Key="headerStyle" TargetType="TextBlock" > 
     <Setter Property="FontSize" Value="46"></Setter> 
     <Setter Property="Foreground" Value="DarkGray"></Setter> 
     <Setter Property="FontWeight" Value="Bold"></Setter> 
    </Style> 

¿Cómo lograr esto?

Respuesta

16

La forma más fácil:

En Dictionary2.xaml definen MergedDictionaries (justo después de la etiqueta de apertura ResourceDictionary):

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="/Path/to/Dictionary1.xaml" /> 
</ResourceDictionary.MergedDictionaries> 

Y luego

<Style x:Key="headerStyle" TargetType="TextBlock" BasedOn="{StaticResource basicStyle}" > 
    ..... 
</Style> 

Esto va a resolver el problema, pero como con todas las soluciones fáciles son un inconveniente: cada vez que fusionas diccionarios creas efectivamente una copia del diccionario fusionado. Y es recursivo: si tienes Dict3.xaml y Dict4.xaml que ambos cargan Dictionary2.xaml, tendrás tres instancias de Dictionary1.xaml creadas. Con una estructura de dependencia compleja, puede llegar a tener más de 19,000 objetos de diccionario en la memoria al iniciar la aplicación y la huella de memoria va de 180 MB a 1200 MB (TrueStory ™ :().

La solución es SharedResourceDictionary. La implementación en el tutorial debe ser vista como un punto de partida y probablemente necesite algún tipo de ajuste, dependiendo del escenario de uso. Google "wpf SharedResourceDictionary" para algunos problemas y soluciones.

+0

Estaba buscando exactamente lo mismo. Para en el momento, utilizaré la manera fácil y también continuaré explorando SharedResourceDictionary. – Tilak

Cuestiones relacionadas