簡體   English   中英

Windows Phone 8中應用程序欄的本地化

[英]Localization of Application Bar in windows phone 8

我希望本地化我在App.xaml中制作的App Bar,但是當我嘗試綁定條形項目的文本時,它說文本不能為空,我嘗試了本地化應用程序欄的其他示例,但它們都沒有用於app欄,可以在所有頁面上使用..

您可以在App.xaml使用一些偽Text聲明一個全局應用欄,例如:

<Application
    x:Class="PhoneApp1.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone">

    <!--Application Resources-->
    <Application.Resources>
        <local:LocalizedStrings xmlns:local="clr-namespace:PhoneApp1" x:Key="LocalizedStrings"/>
        <shell:ApplicationBar x:Key="GlobalAppBar">
            <shell:ApplicationBarIconButton Text="TEST" IconUri="/Assets/check.png"/>
        </shell:ApplicationBar>
    </Application.Resources>

    <Application.ApplicationLifetimeObjects>
        <!--Required object that handles lifetime events for the application-->
        <shell:PhoneApplicationService
            Launching="Application_Launching" Closing="Application_Closing"
            Activated="Application_Activated" Deactivated="Application_Deactivated"/>
    </Application.ApplicationLifetimeObjects>

</Application>

App.xaml.cs應用本地化:

    var appBar = App.Current.Resources["GlobalAppBar"] as ApplicationBar;
    ((ApplicationBarIconButton) appBar.Buttons[0]).Text = AppResources.AppBarButtonText;

現在,您可以在App任何位置使用全局AppBar ,只需在PhoneApplicationPage后面的代碼中進行初始化:

public MainPage()
{
    InitializeComponent();
    ApplicationBar = App.Current.Resources["GlobalAppBar"] as ApplicationBar;
}

您獲得的錯誤來自ApplicationBar不是DependencyObject的事實,因此它不支持Bindings。 一個常見的替代方法是使用帶有DependencyProperties的自定義AppBar,最值得注意的是BindableApplicationBar ..

<bar:BindableApplicationBarButton
    Text="{Binding IconButtonText}"
    IconUri="{Binding IconUri, FallbackValue=/Icons/Dark/appbar.add.rest.png}"
    IsEnabled="{Binding ButtonIsEnabled}" />

CaliburnBindableAppBar

<bab:BindableAppBarButton
    x:Name="Add"
    Text="{Binding AddButtonText}"
    Visibility="{Binding ShowAddButton, Converter={StaticResource BooleanToVisibilityConverter}}"
    IconUri="{Binding ButtonIconUri}"/>

(.xaml來自文檔的樣本)

或者您可以采用默認VS模板建議的方式:

  1. 將以下代碼添加到頁面的XAML(他們說是最后一個元素,但我不確定它是否重要)

  2. 在后面的代碼中創建一個私有方法來添加和數據綁定菜單項,並從構造函數(或者您調用InitializeComponent任何地方)調用它:

XAML:

<phone:PhoneApplicationPage.ApplicationBar>
    <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True" Mode="Minimized" />
</phone:PhoneApplicationPage.ApplicationBar>

C#代碼背后:

private void BuildLocalizedApplicationBar()
{
    // Create a new menu item with the localized string from AppResources.
    ApplicationBarMenuItem appBarMenuItem = new ApplicationBarMenuItem(AppResources.AboutMenuItem);
    ApplicationBar.MenuItems.Add(appBarMenuItem);
}

仍然不是一個理想的解決方案,但可能比僅僅出於這個微不足道的原因引用非本機組件更好。

一些官方參考文獻的組合可能有助於作為解決問題的參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM