gpt4 book ai didi

c# - 我可以在运行时更改浏览器外的 Silverlight 设置吗?

转载 作者:太空狗 更新时间:2023-10-29 20:37:17 25 4
gpt4 key购买 nike

我有一个代码库,可以在各种配置中安装 OOB SL5 应用程序。基于运行时的配置(由初始化参数选择),我想在执行安装之前更新 OOB 设置(标题、窗口标题)。似乎唯一的方法是在编译时通过 OutOfBrowserSettings.xml 文件(或项目设置 UI)。我是不是遗漏了什么,还是就是这样?

最佳答案

根据 MSDN,您可以这样做。

To configure an existing application for out-of-browser support without recompiling, add the configuration XML to the manifest in an existing .xap file. To do this, copy the Deployment.OutOfBrowserSettings property element from the following example code into the manifest file, and then update the values.

As an alternative to the designer, you can specify the out-of-browser settings by populating the manifest template (AppManifest.xml in the Properties or My Project folder) as shown in the following example. By default, the build uses the manifest template to generate the application manifest. However, the template XML is simpler to use in Visual Studio.

来源: http://msdn.microsoft.com/en-us/library/dd833073(v=vs.95).aspx

请记住,*.xap 文件是一个简单的 zip 文件。因此,您可以将其解压缩、修改,然后再次压缩。似乎很容易实现自动化。

您还可以通过实现自己的 chrome 窗口在运行时更改应用程序的标题(我不知道如何更改图标或描述,但我认为无论如何都有意义)。对于示例实现,请遵循 this

要本地化标题,您必须更改标题的值,绑定(bind),并将其绑定(bind)到您的资源(所有代码都是来自上面链接的示例项目的一些自定义):

主页.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());
}
}


}

应用程序.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>

这是一个非常简单的示例,用于展示您可以在运行时更改标题。我假设,如果您将标题公开为可绑定(bind)属性,那么您将知道如何实现您自己的本地化。

要使上述示例正常工作,您需要将“en-GB;pl-PL”添加到项目文件 (*.csproj) 中的 SupportedCultures 标签。

关于c# - 我可以在运行时更改浏览器外的 Silverlight 设置吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10592447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com