Ich habe eine einzige Codebasis, die eine OOB SL5 App in verschiedenen Konfigurationen installieren kann. Basierend auf der Konfiguration zur Laufzeit (ausgewählt durch init-Parameter) möchte ich die OOB-Einstellungen (Titel, Fenstertitel) vor der Installation aktualisieren. Es scheint, dass der einzige Weg über die OutOfBrowserSettings.xml-Datei (oder die Projekteinstellungen-Benutzeroberfläche) zum Zeitpunkt der Kompilierung erfolgt. Fehle ich etwas oder ist das genau so?Kann ich die Silverlight Out-of-Browser-Einstellungen zur Laufzeit ändern?
Antwort
Nach MSDN können Sie das tun.
Zum Konfigurieren einer vorhandenen Anwendung für die Unterstützung außerhalb des Browsers ohne erneute Kompilierung fügen Sie das Konfigurations-XML zum Manifest in einer vorhandenen .xap-Datei hinzu. Kopieren Sie dazu das Property Element Deployment.OutOfBrowserSettings aus dem folgenden Beispielcode in die Manifestdatei, und aktualisieren Sie dann die Werte.
Als Alternative zum Designer können Sie die Einstellungen außerhalb des Browsers angeben, indem Sie die Manifestvorlage (AppManifest.xml im Ordner "Properties" oder "Mein Projekt") wie im folgenden Beispiel gezeigt ausfüllen. Standardmäßig verwendet der Build die Manifestvorlage, um das Anwendungsmanifest zu generieren. Das Vorlagen-XML ist jedoch einfacher in Visual Studio zu verwenden.
Quelle: http://msdn.microsoft.com/en-us/library/dd833073(v=vs.95).aspx
Denken Sie daran, dass die * XAP-Datei eine einfache Zip ist. So können Sie es extrahieren, ändern und dann erneut zippen. Scheint ziemlich einfach zu automatisieren.
Sie können auch den Titel der Anwendung zur Laufzeit ändern (ich weiß nicht, wie man das Symbol oder die Beschreibung ändert, aber ich denke, dass wouldt sowieso Sinn haben), indem Sie Ihr eigenes Chromfenster implementieren. Für Beispielimplementierung folgen this
Titel lokalisieren würden Sie den Wert des Titels ändern müssen, um die Bindung, und binden Sie es an Ihre Ressource (alle Code einige Anpassung von Beispielprojekt von Link oben):
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>
Hinzugefügt Datei ResourceMock.cs:
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>
Dies ist sehr einfach Probe, um zu zeigen, dass Sie den Titel während der Laufzeit ändern können. Wenn Sie Titel als bindbare Eigenschaft verfügbar gemacht haben, wissen Sie, wie Sie Ihre eigene Lokalisierung implementieren können.
Damit das obige Beispiel funktioniert, müssen Sie dem Tag SupportedCultrues in der Projektdatei (* .csproj) "en-GB; pl-PL" hinzufügen.
- 1. Silverlight-Diagramm, Bindungseigenschaft zur Laufzeit ändern?
- 2. ändern Etikettenposition zur Laufzeit
- 3. Schriftart ändern zur Laufzeit
- 4. So ändern Sie die Ansicht zur Laufzeit
- 5. So ändern Sie die Dateierweiterung zur Laufzeit
- 6. C# überprüfen Silverlight Objektgröße zur Laufzeit
- 7. Android, wie die Anwendungssprache zur Laufzeit ändern
- 8. Wie kann ich picturebox Bild zur Laufzeit ändern
- 9. Ändern der Datensatzverbindungszeichenfolge zur Laufzeit
- 10. JVM-Flags zur Laufzeit ändern
- 11. Kann ich den Executor-Speicher von Spark zur Laufzeit ändern?
- 12. Ändern von Code zur Laufzeit
- 13. Ändern Anwendungsleiste Buttonicon zur Laufzeit
- 14. Silverlight DataGrid - Hinzufügen von Spalten zur Laufzeit
- 15. Ändern von App.config zur Laufzeit
- 16. C++ Ressourcen zur Laufzeit ändern
- 17. Warum konnte ich die Variable long_query_time nicht zur Laufzeit ändern
- 18. ändern UIButton Klasse zur Laufzeit
- 19. Ändern von LSApplicationQueriesSchemes zur Laufzeit
- 20. Ändern injizierten Objekt zur Laufzeit
- 21. Kann ich zur Laufzeit Klassenklasseninstanzen unterscheiden?
- 22. Ändern von appSettings "Datei" -Attribut zur Laufzeit
- 23. Wie kann ich die Plattform zur Laufzeit mit MvvMCross erkennen?
- 24. Kann ich die Versionsnummer zur Laufzeit in maven eingeben?
- 25. Ändern der WebService-Endpunktadresse zur Laufzeit
- 26. Testing/Ändern von Java-Quellen zur Laufzeit
- 27. ListBox-Elemente zur Laufzeit in C# ändern
- 28. WPF - Ändern der globalen Schriftgröße zur Laufzeit
- 29. Standardargumente einer R-Funktion zur Laufzeit ändern
- 30. Xamarin.Forms - ListView Höhe zur Laufzeit ändern
Danke für die Antwort. Dies funktioniert gut, um die XAP-Datei vor der Bereitstellung zu ändern. Beachten Sie jedoch, dass ich die aktuellen OOB-Einstellungen _bei Laufzeit_ bei der Installation ändern muss. –
Ok, ich verstehe es jetzt. Nun, es wird nicht standardmäßig unterstützt, Sie müssten ein benutzerdefiniertes Fenster erstellen. Sehen Sie [hier] (http: //www.codeproject.com/Artikel/68955/Silverlight-4-How-Can-I-Erstellen-ein-Kunden-OOB-Wi) – Botis
Das würde immer noch nicht das erreichen, was ich brauche (obwohl ich sehen kann, vielleicht war meine Frage nicht klar genug) . Lassen Sie mich ein besseres Beispiel geben: Eine einzelne XAP-Datei kann mehrere Sprachen bedienen, indem sie Ressourcen zur Laufzeit wechselt. Wenn der Benutzer jedoch entscheidet, diese App-OOB zu installieren, werden nur der Titel, die Beschreibung und das Symbol angezeigt, die aus dem Manifest stammen. Ich muss den Titel, der mit der installierten App angezeigt wird, an das aktuelle Gebietsschema anpassen, genau wie die Anwendungszeichenfolgen. –