Mam jedną bazę kodów, która może zainstalować aplikację OOB SL5 w różnych konfiguracjach. W oparciu o konfigurację w czasie wykonywania (wybraną przez parametry init) chciałbym zaktualizować ustawienia OOB (tytuł, tytuł okna) przed wykonaniem instalacji. Wydaje się, że jedynym sposobem jest użycie pliku OutOfBrowserSettings.xml (lub interfejsu ustawień projektu) podczas kompilacji. Czy brakuje mi czegoś lub czy tak po prostu jest?Czy mogę zmienić ustawienia Silverlight poza przeglądarką w czasie wykonywania?
Odpowiedz
Według MSDN można to zrobić.
Aby skonfigurować istniejącą aplikację do obsługi poza przeglądarką bez ponownej kompilacji, dodaj plik konfiguracyjny XML do pliku manifestu w istniejącym pliku .xap. Aby to zrobić, skopiuj element właściwości Deployment.OutOfBrowserSettings z poniższego przykładowego kodu do pliku manifestu, a następnie zaktualizuj wartości.
Jako alternatywa dla projektanta można określić ustawienia poza przeglądarką, wypełniając szablon manifestu (AppManifest.xml w folderze Właściwości lub Mój projekt), jak pokazano w poniższym przykładzie. Domyślnie kompilacja używa szablonu manifestu do generowania manifestu aplikacji. Jednak szablon XML jest prostszy w użyciu w Visual Studio.
Źródło: http://msdn.microsoft.com/en-us/library/dd833073(v=vs.95).aspx
Pamiętaj, że plik * .xap jest prosty zip. Możesz go więc wyodrębnić, zmodyfikować, a następnie ponownie skompresować. Wydaje się dość proste do zautomatyzowania.
Możesz także zmienić tytuł aplikacji w czasie wykonywania (nie wiem, jak zmienić ikonę lub opis, ale myślę, że i tak nie mam sensu) przez zaimplementowanie własnego okna chrome. Dla realizacji próbki śledzić this
Aby zlokalizować tytuł trzeba by zmienić wartość tytule, do wiązania i powiązać go do zasobu (cały kod jest pewne dostosowanie projektu próbki z wyżej link):
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>
Dodano ResourceMock.cs plików:
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>
Jest to bardzo prosty przykład, aby pokazać, że można zmienić tytuł na starcie. Im assmuming, że jeśli masz tytuł ujawniony jako właściwość bindable, to będziesz wiedział, jak zaimplementować własną lokalizację.
Aby powyższa próbka działała, należy dodać "en-GB; pl-PL" do znacznika SupportedCultrues w pliku projektu (* .csproj).
- 1. Zmienić ustawienia narodowe w czasie wykonywania?
- 2. Silverlight 3 - Poza przeglądarką HtmlPage.Window.Navigate
- 3. F # i Silverlight 5: poza przeglądarką z podwyższonym zaufaniem?
- 4. Czy mogę zmienić pamięć executorów Sparka w czasie wykonywania?
- 5. Silverlight 3 - Czy mogę uruchomić program poza przeglądarką w innej aplikacji?
- 6. Silverlight 3 poza przeglądarką: ustawić rozmiar okna hosta?
- 7. Specyficzne ustawienia poza przeglądarką nie mają wpływu na aplikacje przeglądarkowe.
- 8. Jak zmienić rozszerzenie pliku w czasie wykonywania
- 9. Czy mogę uruchomić klienta Native firmy Google poza przeglądarką?
- 10. WPF: Jak zmienić CurrentUICulture w czasie wykonywania
- 11. jak zmienić typ instancji w czasie wykonywania
- 12. Jak zmienić lokalizację strony w czasie wykonywania
- 13. Java Swing - przełączaj ustawienia narodowe dynamicznie w czasie wykonywania
- 14. Czy można zmienić właściwości WebReference w czasie wykonywania?
- 15. Zastąpienie Asp.net Ustawienia członkostwa w czasie wykonywania (asp.net mvc)
- 16. Jak zmienić język w czasie wykonywania w java swing
- 17. Aplikacja internetowa "Poza przeglądarką" działająca podczas uruchamiania?
- 18. Czy mogę wstawić kolumnę w widoku listy w czasie wykonywania?
- 19. winform na Ustawienia aplikacji: nie można zapisać ustawienia aplikacji, które zostały dodane w czasie wykonywania
- 20. Czy mogę opcjonalnie wyłączyć atrybut JsonIgnore w czasie wykonywania?
- 21. Jak zmienić konfigurację extraParams proxy w czasie wykonywania w extjs?
- 22. Czy można oglądać zmienne w czasie wykonywania?
- 23. Dostęp do informacji o hoście lub adresie URL w Silverlight poza przeglądarką
- 24. Zmienianie wartości makra w czasie wykonywania
- 25. Jak zmienić typ UIBarButtonItem w UINaviagationBar w czasie wykonywania?
- 26. Jak zmienić rozmiar formantu użytkownika w WPF w czasie wykonywania
- 27. Awaria OCMock w czasie wykonywania
- 28. czy można zastąpić metodę w czasie wykonywania?
- 29. Objective-C: Jak zmienić klasę obiektu w czasie wykonywania?
- 30. Zabezpieczanie interfejsu API przed wywołaniem poza przeglądarką
Dzięki za odpowiedź. To działa dobrze, modyfikując plik XAP przed wdrożeniem, ale pamiętaj, że muszę mieć możliwość modyfikowania bieżących ustawień OOB _at runtime_ podczas instalacji. –
Ok, rozumiem. Cóż, domyślnie nie jest obsługiwana, dlatego musisz utworzyć niestandardowe okno. Spójrz [tutaj] (http: //www.codeproject.com/Articles/68955/Silverlight-4-How-Can-I-Create-a-Custom-OOB-Wi) – Botis
Wciąż nie osiągnęłbym tego, czego potrzebuję (choć widzę, że moje pytanie nie było wystarczająco jasne) . Pozwolę sobie podać lepszy przykład: Jeden pojedynczy plik XAP może obsługiwać wiele języków, zmieniając pliki zasobów w środowisku wykonawczym. Jeśli użytkownik zdecyduje się zainstalować tę aplikację, tylko tytuł, opis i ikona będą widoczne w manifeście. Muszę dostosować tytuł, który wyświetla się z zainstalowaną aplikacją do bieżącego locale, tak jak robią to ciągi aplikacji. –