Share via


Silverlight: ¿Sabía que… puede cargar un control XAML desde un archivo o una cadena en código?

Si ha definido un control de Silverlight en XAML en un proyecto, lo puede cargar y crear directamente desde un archivo con el método System.Windows.Markup.XamlReader.Load(). También puede utilizar este método para crear un control Silverlight desde una cadena.

En este ejemplo, he creado 2 funciones. La primera función utiliza el parámetro URI que apunta al archivo XAML que deseo cargar en el proyecto. La segunda función, utiliza un parámetro String que representa el control Silverlight.

public static object LoadFromXaml(Uri uri)

{

    System.Windows.Resources.StreamResourceInfo streamInfo = System.Windows.Application.GetResourceStream(uri);

 

    if ((streamInfo != null) && (streamInfo.Stream != null))

    {

        using (System.IO.StreamReader reader = new System.IO.StreamReader(streamInfo.Stream))

        {

            return System.Windows.Markup.XamlReader.Load(reader.ReadToEnd());

        }

    }

 

    return null;

}

public static object LoadFromXamlString(string xamlControl)

{

    return System.Windows.Markup.XamlReader.Load(xamlControl);

}

Estos ejemplos previos devuelven un objeto genérico, por cual puede convertir el tipo al objeto que está cargando. Por ejemplo:

Button myButton = (Button)LoadFromXaml(new Uri("/LoadXaml;component/MyButton.xaml", UriKind.Relative));

o

string buttonXAML = "<Button xmlns='https://schemas.microsoft.com/client/2007' Width=\"100\" Height=\"100\" Content=\"Click Me\"></Button>";

Button myButton = (Button) LoadFromXaml(buttonXAML);

 

Nota: Debe declarar un espacio de nombre genérico XAML (ejemplo abajo) para evitar este error:

AG_E_PARSER_MISSING_DEFAULT_NAMESPACE [Line: 0 Position: 0]

<Button xmlns='https://schemas.microsoft.com/client/2007' Width="100" Height="100" Content="Click Me"></Button>

 

Contenido sindicado de Silverlight Tips of the Day - Blog by Mike Snow

Traducción autorizada por Mike Snow.