我有一個代碼庫,可以在各種配置中安裝OOB SL5應用程序。基於運行時配置(由init參數選擇),我想在執行安裝之前更新OOB設置(標題,窗口標題)。看起來唯一的方法是在編譯時通過OutOfBrowserSettings.xml文件(或項目設置UI)。我是否錯過了某些東西,或者僅僅是這樣?我可以在運行時更改Silverlight的瀏覽器外設置嗎?
7
A
回答
2
根據MSDN你可以做到這一點。
要配置現有應用程序的瀏覽器外瀏覽支持而無需重新編譯,請將配置XML添加到現有.xap文件中的清單中。爲此,請將以下示例代碼中的Deployment.OutOfBrowserSettings屬性元素複製到清單文件中,然後更新這些值。
作爲設計者的替代方法,您可以通過填充清單模板(屬性或我的項目文件夾中的AppManifest.xml)來指定瀏覽器外設置,如以下示例所示。默認情況下,構建使用清單模板來生成應用程序清單。但是,模板XML在Visual Studio中使用更簡單。
來源: http://msdn.microsoft.com/en-us/library/dd833073(v=vs.95).aspx
請記住,在* .xap文件是一個簡單的拉鍊。所以你可以提取它,修改,然後再壓縮它。似乎非常簡單的自動化。
通過實現自己的chrome窗口,您還可以在運行時更改應用程序的標題(我不知道如何更改圖標或描述,但我認爲woulndt有意義)。對於執行樣本跟蹤this
要本地化的標題,你就必須改變所有權的價值,結合,並將其綁定到你的資源(所有的代碼是從上面的鏈接樣本項目的一些定製):
的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>
添加文件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>
這是非常簡單的示例,展示,你可以在運行時更改標題。我暗示,如果你將標題暴露爲可綁定屬性,那麼你將知道如何實現你自己的本地化。
要使上述示例正常工作,需要在項目文件(* .csproj)的SupportedCultrues標記中添加「en-GB; pl-PL」。
相關問題
- 1. 我可以在瀏覽器之外運行Google的Native Client嗎?
- 2. 我可以在運行時更改emacs設置嗎?
- 3. Silverlight在瀏覽器外設置
- 4. 你可以強制Silverlight只運行瀏覽器外?
- 5. Kohana 3 - 我可以在運行時更改配置文件的設置嗎?
- 6. 我可以檢測某些瀏覽器(IE)設置(不更改,檢測)嗎?
- 7. 我可以在瀏覽器中更改WebKit CSS規則嗎?
- 8. Silverlight設置瀏覽器URL
- 9. 我可以在瀏覽器中運行JSShaper嗎?
- 10. IsLoggingEnabled()可以在運行時更改嗎?
- 11. 我們可以設置瀏覽器默認的選擇嗎?
- 12. 如何運行簡單的xquery?我可以在瀏覽器中運行XQuery嗎?
- 13. 谷歌瀏覽器擴展程序可以像瀏覽主題一樣更改瀏覽器的外觀嗎?
- 14. 我可以通過Javascript在瀏覽器中設置本地時區嗎?
- 15. 運行時可以更改Unbound Expression嗎?
- 16. 我可以在運行時更改Button或TextView的功能嗎?
- 17. 我可以在運行時設置StructLayout的size屬性嗎?
- 18. 您可以在運行時更改ConnectionString配置值嗎?
- 19. 您可以在運行時更改Foo.settings文件中的設置嗎?
- 20. 我可以在設置PHPUnit模擬器後更改方法嗎?
- 21. 在Android瀏覽器中可以使translate3d順利運行嗎?
- 22. 可以在瀏覽器上運行excel宏嗎?
- 23. 可以在Android上運行Chromium瀏覽器嗎?
- 24. iOS - 我可以在運行時更改localizable.strings內容嗎?
- 25. Qt:我們可以在運行時更改資源內容嗎?
- 26. 我可以在瀏覽器中運行Jasmine +量角器測試嗎?
- 27. 我可以在運行時更改Log4Qt配置的文件名嗎?
- 28. VB - 可以在消息框中設置運行計時器嗎?
- 29. 我可以在沒有瀏覽器的情況下運行Selenium網格嗎?
- 30. 當mongodb運行時,我可以更改mongod的binding_ip嗎?
感謝您的迴應。這對於在部署之前修改XAP文件很有效,但請記住,我需要能夠在安裝時修改當前的OOB設置_at runtime_。 –
好吧,我現在明白了。那麼,它的默認不支持,你將不得不創建一個自定義窗口。看看[這裏](http://www.codeproject。com/Articles/68955/Silverlight-4-How-Can-I-Create-a-Customized-OOB-Wi) – Botis
這還不能達到我所需要的(雖然我可以看到也許我的問題還不夠清楚) 。讓我舉個更好的例子:一個單獨的XAP文件可以通過在運行時切換資源文件來爲多種語言提供服務。如果用戶決定安裝該應用程序OOB,則他們看到的唯一標題,說明和圖標將是清單中出現的內容。我需要將顯示的標題和已安裝的應用程序調整到當前語言環境,就像應用程序字符串一樣。 –