visual - wpf presentacion




Cómo combinar recursos importados y locales en el control de usuario de WPF (2)

Estoy escribiendo varios controles de usuario de WPF que necesitan recursos compartidos e individuales.

He descubierto la sintaxis para cargar recursos desde un archivo de recursos separado:

<UserControl.Resources>
    <ResourceDictionary Source="ViewResources.xaml" />
</UserControl.Resources>

Sin embargo, cuando hago esto, no puedo agregar recursos localmente, como:

<UserControl.Resources>
    <ResourceDictionary Source="ViewResources.xaml" />
    <!-- Doesn't work: -->
    <ControlTemplate x:Key="validationTemplate">
        ...
    </ControlTemplate>
    <style x:key="textBoxWithError" TargetType="{x:Type TextBox}">
        ...
    </style>
    ...
</UserControl.Resources>

He echado un vistazo a ResourceDictionary.MergedDictionaries, pero eso solo me permite fusionar más de un diccionario externo, no definir más recursos localmente.

Debo estar perdiendo algo trivial?

Cabe mencionar: estoy alojando mis controles de usuario en un proyecto de WinForms, por lo que poner recursos compartidos en App.xaml no es realmente una opción.


Me lo imaginé. La solución involucra a MergedDictionaries, pero los detalles deben ser correctos, así:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ViewResources.xaml" />
        </ResourceDictionary.MergedDictionaries>
        <!-- This works: -->
        <ControlTemplate x:Key="validationTemplate">
            ...
        </ControlTemplate>
        <style x:key="textBoxWithError" TargetType="{x:Type TextBox}">
            ...
        </style>
        ...
    </ResourceDictionary>
</UserControl.Resources>

Es decir, los recursos locales deben estar anidados dentro de la etiqueta ResourceDictionary. Entonces el ejemplo here es incorrecto


Puede definir recursos locales dentro de la sección MergedDictionaries:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <!-- import resources from external files -->
            <ResourceDictionary Source="ViewResources.xaml" />

            <ResourceDictionary>
                <!-- put local resources here -->
                <Style x:key="textBoxWithError" TargetType="{x:Type TextBox}">
                    ...
                </Style>
                ...
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>




resources