example buttons xaml custom-controls windows-10 uwp

xaml - buttons - uwp navigation view



¿Cuál es la sintaxis correcta para dividir un archivo generic.xaml utilizando MergedDictionaries(UWP)? (2)

Considere el caso donde creo una biblioteca MyCustomControlsProject contiene un conjunto de controles personalizados. En lugar de colocar el código XAML para todos esos controles en un generic.xaml muy grande, quiero separar cada control en su propio archivo XAML y luego hacer referencia a ese archivo desde generic.xaml

<ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="<url_syntax_file_1>" /> <ResourceDictionary Source="<url_syntax_file_2>" /> </ResourceDictionary.MergedDictionaries>

La estructura de carpetas en el explorador de soluciones (así como en el sistema de archivos) se ve así:

  • MyCustomControlsProject (proyecto / carpeta)
    • Temas (carpeta)
      • Generic.xaml (archivo)
      • ControlTemplates (carpeta)
        • MyControl1.xaml (archivo)
        • MyControl2.xaml (archivo)

En el pasado, hice esto en Silverlight y en Silverlight para Win Phone usando esta sintaxis:

<ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/MyCustomControlsProject;Component/Themes/ControlTemplates/MyControl1.xaml"/> <ResourceDictionary Source="/MyCustomControlsProject;Component/Themes/ControlTemplates/MyControl2.xaml"/> </ResourceDictionary.MergedDictionaries>

Y para Windows Phone 8.1 usando esta sintaxis:

<ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="ms-appx:///Themes/ControlTemplates/MyControl1.xaml" /> <ResourceDictionary Source="ms-appx:///Themes/ControlTemplates/MyControl2.xaml" /> </ResourceDictionary.MergedDictionaries>

Ninguna de estas sintaxis funciona en Win 10 (UWP). Intentar usar esos conduce a una excepción de tiempo de ejecución:

An exception of type ''Windows.UI.Xaml.Markup.XamlParseException'' occurred in MyApplication.exe but was not handled in user code WinRT information: Failed to assign to property ''Windows.UI.Xaml.ResourceDictionary.Source'' because the type ''Windows.Foundation.String'' cannot be assigned to the type ''Windows.Foundation.Uri''.

También probé esta sintaxis que resultó en la misma excepción:

<ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="ControlTemplates/MyControl1.xaml" /> <ResourceDictionary Source="ControlTemplates/MyControl2.xaml" /> </ResourceDictionary.MergedDictionaries>

Curiosamente, parece que app.xaml no tiene problemas para usar la sintaxis anterior.

¿Alguien sabe la sintaxis correcta para la cadena url en un atributo source en un nodo ResourceDictionary en generic.xaml? ¿O es algo que UWP aún no alcanzó?


La sintaxis correcta es:

<ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="ms-appx:///MyCustomControlsProject/Themes/ControlTemplates/MyControl1.xaml" /> <ResourceDictionary Source="ms-appx:///MyCustomControlsProject/Themes/ControlTemplates/MyControl2.xaml" /> </ResourceDictionary.MergedDictionaries>


Lo que necesita es agregar la carpeta Temas en su último intento:

<ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Themes/ControlTemplates/MyControl1.xaml" /> <ResourceDictionary Source="Themes/ControlTemplates/MyControl2.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary>