0

我正在开发 windows phone 8 应用程序,它应该可以使用两种语言,英语和阿拉伯语。 默认语言为英语。 以后用户可以在设置页面中将语言从英语更改为阿拉伯语或从阿拉伯语更改为英语。

当用户单击主页中的“城市”按钮时,我将在列表框中显示城市。默认情况下,我将城市绑定到英文值,即TextBlock x:Name="city" Text="{Binding CityNameEn}"。下面是用户界面代码。

<ListBox x:Name="citiesList" SelectionChanged="citiesList_SelectionChanged">
<ListBox.ItemTemplate>
       <DataTemplate>
             <Grid Height="50" Margin="0,10,0,0">
                   <Grid.RowDefinitions>
                        <RowDefinition Height="40"/>
                        <RowDefinition Height="10"/>
                   </Grid.RowDefinitions>

                   <StackPanel x:Name="dataRow" Grid.Row="0" Orientation="Horizontal">
                        <TextBlock x:Name="city" Text="{Binding CityNameEn}" Foreground="#FF501F6E" Style="{StaticResource PhoneTextNormalStyle}" HorizontalAlignment="Left" FontSize="28" Width="420"/>
                        <Image x:Name="arrow" Stretch="Fill" Margin="0,0,0,0" Source="Images/arrow.png" Height="20"/>
                   </StackPanel>

                   <Image  x:Name="line" Grid.Row="1" Width="460" HorizontalAlignment="Center" Source="Images/separator.png"  />
              </Grid>
        </DataTemplate>
 </ListBox.ItemTemplate>

我正在设置列表框源,如下所示。私人无效Cities_Page_Loaded(对象发件人,RoutedEventArgs e){cityList.ItemsSource = Constants.cities;}

下面是 City 的 Data Context 类。

class City
{

public string CityId { get; set; }

public string CityNameAr { get; set; }

public string CityNameEn { get; set; }

public string DisplayOrder { get; set; }

public int FocusedCityIndex { get; set; }

}

现在当语言为英语时,所有城市都以英语显示。因为我们将文本块绑定到包含英文值的属性 CityNameEn。

当用户将设置页面中的语言从英语更改为阿拉伯语时。 然后我实现了如下的本地化。

if (selectedItem.Equals("English"))
{
   Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
 Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
}
else
{
   Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("ar");
   Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ar");
}

现在,当用户单击主页中的城市按钮时,所有城市都应以阿拉伯语显示。 *因为用户将语言从英语更改为阿拉伯语。*

但城市仅以英文显示,因为 textblock 绑定到包含英文值的属性。 *因此,要以阿拉伯语显示城市,我必须将文本块绑定更改为包含阿拉伯语值的属性。*

我应该如何根据语言更改更改文本块的绑定属性。

谢谢。

4

1 回答 1

0

您可以在您的类中添加一个City.CityNamegetter 属性,该属性City将根据当前文化返回城市名称,如下所示:

class City
{
    public string CityId { get; set; }

    public string CityNameAr { get; set; }

    public string CityNameEn { get; set; }

    public string CityName
    {
        get
        {
            if (Thread.CurrentThread.CurrentCulture.Name == "en-US")
                return this.CityNameEn;
            else
                return this.CityNameAr;
        }
    }

    public string DisplayOrder { get; set; }

    public int FocusedCityIndex { get; set; }
}

然后在 XAML 中使用该属性:

<TextBlock x:Name="city" Text="{Binding CityName}" Foreground="#FF501F6E" Style="{StaticResource PhoneTextNormalStyle}" HorizontalAlignment="Left" FontSize="28" Width="420"/>
于 2013-07-11T07:42:47.753 回答