lor*_*gia 11 c# xaml designer embedded-resource windows-store-apps
我已经开始为Windows 8.1创建Windows应用商店应用程序,现在我遇到了有关本地化的问题.
我想在设计时从.resw文件中显示字符串资源,但每次尝试这样做都会失败,即使它在运行时也能正常工作.
当使用x:Uid属性时,我仍然需要提供Text属性(即对于TextBlock),我不喜欢写两次文本.
我还尝试在viewmodel上为字符串创建一个属性:
public string Title
{
get { return ResourceLoader.GetForCurrentView("Strings").GetString("MainView_Title"); }
}
Run Code Online (Sandbox Code Playgroud)
这在运行时工作,但在设计时它是空白的.
所以问题是,有没有办法在XAML设计器中显示来自.resw文件的资源?
更具体地说,ResourceManager类是否允许在设计时读取.resw文件?
谢谢你的帮助,卢卡斯
Nat*_*ond 11
所以,你可以做几件事.
第一个(也是最简单的,假设你已经使用过x:Uid)只是将文本提供给Text字段.该x:Uid产权相关值将覆盖无论是在那里.
<TextBlock Text="MyText" x:Uid="MainView_Title"/>
Run Code Online (Sandbox Code Playgroud)
第二种方法是使用你已经拥有的属性,然后检查应用程序是否处于设计时间(通过几种不同的方法),然后返回一个常量值(如果是)和资源(如果不是).
public string Title
{
if(ViewModelBase.IsInDesignTimeStatic) //Mvvm Light's easy accessor
return "My Text";
return ResourceLoader.GetForCurrentView("Strings").GetString("MainView_Title");
}
Run Code Online (Sandbox Code Playgroud)
希望这有助于编码!
编辑:似乎有一种新方法可以做到这一点,至少从Windows 8.1开始.
ResourceLoader(类似于上面描述的属性).创建一个索引属性访问器,它接受一个字符串键并从中返回值ResourceLoader.
public class LocalizedStrings
{
public string this[string key]
{
get
{
return App.ResourceLoader.GetForViewIndependentUse().GetString(key);
}
}
}
Run Code Online (Sandbox Code Playgroud)在你的中App.xaml,定义一个StaticResource这种类型.
<Application.Resources>
<ResourceDictionary>
<common:LocalizedStrings x:Key="Localized"/>
</ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)现在,当您想使用输入键访问您的属性时MainView_Title,请使用此选项.它更冗长,但它应该在设计师和应用程序本身中进行翻译.
<TextBlock Text="{Binding Source={StaticResource Localized}, Path=[MainView_Title]}" />
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以将其随机播放,以便更具可读性,例如:
<TextBlock Text="{Binding [MainView_Title], Source={StaticResource Localized}}" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3841 次 |
| 最近记录: |