Ответ 1
Старый метод
Итак, есть несколько вещей, которые вы можете сделать.
Первый (и самый простой, если вы используете x:Uid
уже), - это просто отправить текст в поле "Текст". x:Uid
-связанное значение будет перезаписывать все, что там есть.
<TextBlock Text="MyText" x:Uid="MainView_Title"/>
Второй способ - использовать свойство, как у вас уже есть, а затем проверить, находится ли приложение во время разработки (через несколько разных методов), а затем вернуть постоянное значение, если оно есть, и ресурс, если он нет.
public string Title
{
if(ViewModelBase.IsInDesignTimeStatic) //Mvvm Light easy accessor
return "My Text";
return ResourceLoader.GetForCurrentView("Strings").GetString("MainView_Title");
}
Надеюсь, это поможет и счастливое кодирование!
Изменить: похоже, есть новый способ сделать это, по крайней мере, с Windows 8.1.
Новый метод
- Создайте класс, который ссылается на
ResourceLoader
(аналогично описанному выше свойству). -
Создайте индексированный аксессуар свойств, который принимает строковый ключ и возвращает значение из
ResourceLoader
.public class LocalizedStrings { public string this[string key] { get { return App.ResourceLoader.GetForViewIndependentUse().GetString(key); } } }
-
В
App.xaml
укажитеStaticResource
этого типа.<Application.Resources> <ResourceDictionary> <common:LocalizedStrings x:Key="Localized"/> </ResourceDictionary> </Application.Resources>
Теперь, когда вы хотите получить доступ к свойству с ключом входа MainView_Title
, используйте это. Это более подробный, но он должен переводить как в дизайнере, так и в самом приложении.
<TextBlock Text="{Binding Source={StaticResource Localized}, Path=[MainView_Title]}" />
Вы можете перемешать его вокруг, чтобы быть более читабельным, если хотите, например:
<TextBlock Text="{Binding [MainView_Title], Source={StaticResource Localized}}" />