Когда я учился разрабатывать приложения на базе MVVM, мне очень не нравилось, что во многих статьях показано, как создается ApplicationBar во ViewModel. Там кнопки и пункты меню заполнены локализованными строками.
Я долго искал решение, и оно было найдено.
Внимание! В статье описано только решение проблемы локализации панели приложения и предполагается, что читатели знакомы с основами XAML, MVVM, привязкой данных и локализацией приложения.
Встречайте библиотеку для локализации панели приложения: http://appbarutils.codeplex.com/ Для проверки создадим страницу приложения и добавим на нее обычную панель приложения с кнопками и, при необходимости, пунктами меню.
Например, вот так:
Обратите внимание: свойство Text не должно содержать пробелов.<shell:ApplicationBar> <shell:ApplicationBar.MenuItems> <shell:ApplicationBarMenuItem IsEnabled="True" Text="lookscreen"/> </shell:ApplicationBar.MenuItems> <shell:ApplicationBarIconButton IconUri="/Assets/AppBar/save.png" IsEnabled="True" Text="save"/> </shell:ApplicationBar>
Работоспособность при наличии кириллицы я не проверял.
Добавьте пакет AppBarUtils в приложение командой Установочный пакет AppBarUtils или через менеджер пакетов.
Добавьте в разметку страницы ссылку на сборку этого пакета: xmlns:AppBarUtils="clr-namespace:AppBarUtils;assembly=AppBarUtils"
И еще нам нужна сборка для установки поведения: xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
После этих приготовлений мы задаем поведение страницы, на которой расположена панель приложения.
У меня получилось вот так: <i:Interaction.Behaviors>
<AppBarUtils:AppBarItemCommand Id="save" Type="Button" Command="{Binding SaveCommand}" Text="{Binding LocalizedResources.SaveButton, Mode=OneWay, Source={StaticResource LocalizedStrings}}"/>
<AppBarUtils:AppBarItemCommand Id="lookscreen" Type="MenuItem" Command="{Binding LookScreenCommand}" Text="{Binding LocalizedResources.ScreenItem, Mode=OneWay, Source={StaticResource LocalizedStrings}}"/>
</i:Interaction.Behaviors>
Поведение связывается с элементом, которому оно присвоено по идентификатору со значением, равным свойству Text пункта меню или кнопки.
Кроме того, указывается тип элемента меню, которому задается поведение: для кнопки — Button, для пункта меню — MenuItem. Смысл остальных свойств, думаю, объяснять не нужно.
После всех манипуляций у меня получилась страница в реальном приложении, которое опубликовано в магазине Windows Phone: XAML < phone:PhoneApplicationPage
xmlns=" http://schemas.microsoft.com/winfx/2006/xaml/presentation "
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml "
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone "
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone "
xmlns:d="http://schemas.microsoft.com/expression/blend/2008 "
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006 "
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity "
xmlns:Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP8 "
xmlns:AppBarUtils="clr-namespace:AppBarUtils;assembly=AppBarUtils "
x:Class="CatDay.MainPage"
mc:Ignorable="d "
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations ="PortraitOrLandscape"
shell:SystemTray.IsVisible="True "
DataContext="{Binding Main, Mode=OneWay, Source={StaticResource Locator}}">
< shell:SystemTray.ProgressIndicator >
< shell:ProgressIndicator IsIndeterminate="true" IsVisible="{Binding ProgressBarValue}" Text="{Binding ProgressBarText}" />
</ shell:SystemTray.ProgressIndicator >
< phone:PhoneApplicationPage.ApplicationBar >
< shell:ApplicationBar >
< shell:ApplicationBar.MenuItems >
< shell:ApplicationBarMenuItem IsEnabled="True" Text="donate"/>
< shell:ApplicationBarMenuItem IsEnabled="True" Text="lookscreen"/>
< shell:ApplicationBarMenuItem IsEnabled="True" Text="skydrive"/>
< shell:ApplicationBarMenuItem IsEnabled="True" Text="feedback"/>
</ shell:ApplicationBar.MenuItems >
< shell:ApplicationBarIconButton IconUri="/Assets/AppBar/transport.rew.png" IsEnabled="True" Text="previus"/>
< shell:ApplicationBarIconButton IconUri="/Assets/AppBar/save.png" IsEnabled="True" Text="save"/>
< shell:ApplicationBarIconButton IconUri="/Assets/AppBar/share.png" IsEnabled="True" Text="share"/>
< shell:ApplicationBarIconButton IconUri="/Assets/AppBar/transport.ff.png" IsEnabled="True" Text="next"/>
</ shell:ApplicationBar >
</ phone:PhoneApplicationPage.ApplicationBar >
Теги: #XAML #windows phone #локализация интерфейса #Разработка для Windows Phone
-
Психологизм В Лингвистике
19 Oct, 24 -
Google Расправился С Поисковиком Jooble
19 Oct, 24 -
Выпуск Spree 0.10.0
19 Oct, 24 -
Еженедельный Подкаст № 53
19 Oct, 24 -
Новый Алгоритм Яндекса Минусинск
19 Oct, 24