【发布时间】:2016-01-19 16:55:47
【问题描述】:
所以我做了一个小测试应用程序来测试,如果这个绑定本地化文本到TextBlock 有效。我怀疑它应该/可以做得更好,如果是,那么您的建议会非常好!
另外,我在 XAML 代码中注释掉了 TextBlock,它确实直接从 resx 绑定值,但我无法让它工作.. 关于如何更改该文本的任何想法也会很棒! :)
XAML:
<Window x:Class="LocalizationTestWpf.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:LocalizationTestWpf.Resources"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button x:Name="btnChange" Content="Button" HorizontalAlignment="Left" Margin="206,192,0,0" VerticalAlignment="Top" Width="75" Click="btnChange_Click"/>
<!--<TextBlock x:Name="txtDisplay" HorizontalAlignment="Center" Margin="206,138,236,152" TextWrapping="Wrap" Text="{x:Static local:strings.Hello}" VerticalAlignment="Center" TextAlignment="Center" Width="75" Height="29"/>-->
<TextBlock x:Name="txtDisplay" HorizontalAlignment="Center" Margin="206,138,236,152" TextWrapping="Wrap" Text="{Binding SayHello}" VerticalAlignment="Center" TextAlignment="Center" Width="75" Height="29"/>
</Grid>
</Window>
C#:
// http://social.technet.microsoft.com/wiki/contents/articles/22420.binding-to-resources-resx-files-in-xaml.aspx -- how to bind WPF
int step = 0;
public MainWindow()
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("et-EE");
// Adds my class (object) as datacontext, so I can bind those values.
DataContext = new StringValues();
InitializeComponent();
}
private void btnChange_Click(object sender, RoutedEventArgs e)
{
switch (step)
{
case 0:
// Change language
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr-FR");
// Update DataContext -- Do I need to do it like that?
DataContext = new StringValues();
InitializeComponent();
btnChange.Content = "Russian";
step++;
break;
// Following steps are same as 'case 0', only different language.
case 1:
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("ru-RU");
DataContext = new StringValues();
btnChange.Content = "English";
step++;
break;
case 2:
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
DataContext = new StringValues();
btnChange.Content = "Estonian";
step++;
break;
default:
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("et-EE");
DataContext = new StringValues();
btnChange.Content = "France";
step = 0;
break;
}
}
}
public class StringValues
{
public string SayHello
{
get { return strings.Hello; }
}
}
项目文件夹:
WPF 在 VS 中的样子(注意,使用这种绑定方法,文本块是空的):
示例 RESX 文件:
【问题讨论】:
标签: c# wpf xaml localization resx