Tengo una única base de código que puede instalar una aplicación OOB SL5 en varias configuraciones. En función de la configuración en tiempo de ejecución (seleccionada por los parámetros init), me gustaría actualizar la configuración OOB (título, título de la ventana) antes de realizar la instalación. Parece que la única forma es mediante el archivo OutOfBrowserSettings.xml (o la interfaz de usuario de configuración del proyecto) en tiempo de compilación. ¿Me estoy perdiendo algo o es así como es?¿Puedo cambiar la configuración de Silverlight fuera del navegador en tiempo de ejecución?
Respuesta
Según MSDN, puede hacerlo.
Para configurar una aplicación existente para compatibilidad con fuera del navegador sin volver a compilar, agregue el XML de configuración al manifiesto en un archivo .xap existente. Para ello, copie el elemento de propiedad Deployment.OutOfBrowserSettings del siguiente código de ejemplo en el archivo de manifiesto y luego actualice los valores.
Como alternativa al diseñador, puede especificar la configuración de fuera del navegador rellenando la plantilla del manifiesto (AppManifest.xml en la carpeta Propiedades o Mi proyecto) como se muestra en el siguiente ejemplo. Por defecto, la compilación usa la plantilla de manifiesto para generar el manifiesto de la aplicación. Sin embargo, la plantilla XML es más fácil de usar en Visual Studio.
Fuente: http://msdn.microsoft.com/en-us/library/dd833073(v=vs.95).aspx
Recuerde que el archivo * .xap es una postal simple. Entonces puede extraerlo, modificarlo y luego volverlo a comprimir. Parece bastante simple de automatizar.
También puede cambiar el título de la aplicación en tiempo de ejecución (no sé cómo cambiar el icono o la descripción, pero creo que no tendrá sentido de todos modos) implementando su propia ventana de Chrome. Para la implementación de Muestra se this
Para localizar título que tendría que cambiar el valor del título, a la unión, y enlazarlo a su recurso (todo el código es algún tipo de personalización del proyecto de ejemplo de enlace de arriba):
MainPage .xaml:
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Silverlight4.OOB.ChromelessWindow.Demo" x:Class="Silverlight4.OOB.ChromelessWindow.Demo.MainPage"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400" MinWidth="400" MinHeight="300">
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Border BorderBrush="Black" BorderThickness="1" Margin="0,-25,0,0" Grid.Row="1"/>
<local:ControlBar x:Name="ucControlBar" VerticalAlignment="Top" Title="{Binding Source={StaticResource resxWrapper}, Path=Title}"></local:ControlBar>
<Border BorderBrush="Black" BorderThickness="1" CornerRadius="10" Grid.Row="1" Margin="10">
<Border.Background>
<LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
<GradientStop Color="#FFFDC97A"/>
<GradientStop Color="White" Offset="0.5"/>
<GradientStop Color="#FFFDC97A" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
</Border>
<ComboBox SelectionChanged="ComboBox_SelectionChanged" Grid.Row="1" Height="20">
<ComboBoxItem Content="pl-PL" />
<ComboBoxItem Content="en-GB" />
</ComboBox>
<TextBlock x:Name="txtTitle" HorizontalAlignment="Center" Grid.Row="1" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="32" Text="Silverlight 4 Custom Out-Of-Browser Window Demo" Margin="10" TextAlignment="Center" Foreground="#FF5A098F"/>
<TextBlock x:Name="txtInfo" HorizontalAlignment="Center" Grid.Row="1" TextWrapping="Wrap" Text="You are running inside Browser Window" VerticalAlignment="Bottom" Margin="10" FontSize="24" TextAlignment="Center"/>
</Grid>
Añadido ResourceMock.cs archivo:
public class ResourceMock:INotifyPropertyChanged
{
public string Title
{
get
{
MessageBox.Show(Thread.CurrentThread.CurrentCulture.Name);
switch (Thread.CurrentThread.CurrentCulture.Name)
{
case "en-GB": return "English"; break;
case "pl-PL": return "Polish"; break;
default: return "default";
break;
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public void firePropertyChanged(string property)
{
OnPropertyChanged(property);
}
}
MainPage.xaml.cs:
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
if (App.IsRunningOOBWithPermission)
{
txtInfo.Text = "You are running outside Browser Window.";
}
else
{
txtInfo.Text = "You are running inside Browser Window.";
}
}
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var cultrue = (e.AddedItems[0] as ComboBoxItem).Content.ToString();
try
{
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultrue);
var res = App.Current.Resources["resxWrapper"] as ResourceMock;
res.firePropertyChanged("Title");
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
App.xaml:
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Silverlight4.OOB.ChromelessWindow.Demo.App"
xmlns:loc="clr-namespace:Silverlight4.OOB.ChromelessWindow.Demo"
>
<Application.Resources>
<loc:ResourceMock x:Key="resxWrapper"></loc:ResourceMock>
</Application.Resources>
</Application>
Esto es muy simple muestra, para mostrar, que se puede cambiar el título en tiempo de ejecución. Asumo que si tiene el título expuesto como propiedad enlazable, sabrá cómo implementar su propia localización.
Para que la muestra anterior funcione, debe agregar "en-GB; pl-PL" a la etiqueta SupportedCultrues, en el archivo de proyecto (* .csproj).
- 1. silverlight fuera del navegador - iconos
- 2. Silverlight 3 - Fuera del navegador HtmlPage.Window.Navigate
- 3. Cambiar la configuración regional en tiempo de ejecución en Swing
- 4. Desinstalar programáticamente la aplicación silverlight fuera del navegador
- 5. Cambiar la configuración del navegador por script
- 6. Ejecutar Silverlight fuera del navegador desde el navegador después de la instalación
- 7. Acceda a la información de host o URL en Silverlight fuera del navegador
- 8. Cambiar la orientación en tiempo de ejecución
- 9. ¿Cambiar la configuración del proxy del navegador desde Python?
- 10. Silverlight 3 - ¿Puedo ejecutar Fuera del navegador dentro de otra aplicación?
- 11. Silverlight 3 fuera del navegador: ¿configurar el tamaño de la ventana del host?
- 12. ¿Cómo cambiar la configuración extraParams de un proxy en tiempo de ejecución en extjs?
- 13. Configuración del atributo href en tiempo de ejecución
- 14. Obtención de ensamblados de tiempo de ejecución en Silverlight 3
- 15. ¿Cómo puedo leer/escribir la configuración de app.config en tiempo de ejecución sin utilizar la configuración del usuario?
- 16. Almacenar la configuración de la aplicación en Silverlight
- 17. ¿Cómo cambiar AndroidManifest en tiempo de ejecución?
- 18. ¿Cómo cambiar CurrentCulture en tiempo de ejecución?
- 19. ¿Cómo puedo averiguar la configuración del proxy del navegador?
- 20. ¿Interpretación de JavaScript fuera del navegador?
- 21. Silverlight 3.0 fuera del navegador frente a la aplicación WPF/Windows. ¿Resumen de diferencias?
- 22. ¿Puedo cambiar el tamaño de la ventana del navegador?
- 23. Cambiar fuente en tiempo de ejecución
- 24. ¿Puedo ejecutar el Native Client de Google fuera del navegador?
- 25. cómo cambiar los errores de tiempo de ejecución en inglés
- 26. Iniciando configuración de ejecución fuera de Eclipse IDE
- 27. En la aplicación de confianza del navegador Silverlight 5
- 28. Cómo cambiar la extensión de archivo en tiempo de ejecución
- 29. ¿Agregando dinámicamente la configuración del contexto del resorte en el tiempo de ejecución?
- 30. Cómo cambiar sql_mode en el tiempo de ejecución
Gracias por la respuesta. Esto funciona bien para modificar el archivo XAP antes de implementarlo, pero recuerde que necesito poder modificar la configuración actual de OOB _at runtime_ cuando se instalen. –
Ok, lo entiendo ahora. Bueno, no es compatible por defecto, tendría que crear una ventana personalizada. Eche un vistazo [aquí] (http: //www.codeproject.com/Articles/68955/Silverlight-4-How-Can-I-Create-a-Customized-OOB-Wi) – Botis
Eso todavía no lograría lo que necesito (aunque puedo ver que tal vez mi pregunta no era lo suficientemente clara) . Permítanme dar un mejor ejemplo: un solo archivo XAP puede servir en varios idiomas al cambiar los archivos de recursos en tiempo de ejecución. Sin embargo, si el usuario decide instalar esa aplicación OOB, el único título, descripción e icono que verá será lo que salga del manifiesto. Necesito adaptar el título que se muestra con la aplicación instalada a la configuración regional actual, tal como lo hacen las cadenas de aplicaciones. –