C#XAML - Windows 8.1应用程序多语言资源问题AppBar

时间:2014-06-30 23:25:20

标签: c# xaml user-controls microsoft-metro multilingual

我正在使用C#和XAML制作适用于Windows 8.1的应用。 所有字符串都位于名为Resources.resw的资源文件中,该文件位于文件夹en-GB。

我正在使用XAML加载字符串:

             <AppBarButton Icon="Document"
                           x:Uid="AddFiles" 
                           Label="Add files"  
                           Click="btnAddFiles_Click"/>

并像这样使用C#(对于MessageDialogs):

        var loader = new Windows.ApplicationModel.Resources.ResourceLoader();
        var text = loader.GetString(@"Error") + exceptionRoutedEventArgs.ErrorMessage +                       
                    "\r\n\r\n" + loader.GetString(@"Error_FileTypeNotSupported")
        var messageDialog = new MessageDialog(text);
        messageDialog.ShowAsync();

其中exceptionRoutedEventArgs是ExceptionRoutedEventArgs对象。

当我运行我的应用程序时,一切都运行良好。

开发我的应用程序的下一步是添加多语言支持。我启用了多语言应用工具包,我添加了德语。创建了MultilingualResources文件夹,并添加了德语翻译的.xlf文件。我在PC上添加了德语作为我的主要语言,当我运行我的应用程序时,显示了闪屏,代码正在运行,但突然之间,当我的主页应该显示时,会出现黑屏。我试图再次运行它来重建项目,但是一直都是同样的问题。如果我删除了德语翻译文件(.xlf),问题就解决了,但我需要翻译,所以我再次添加了德语翻译文件,问题又出现了...... 实际上,只有在我写这个帖子的时候才意识到问题实际上是应用程序的底部应用程序栏(有黑色背景)覆盖了整个屏幕(但是应用程序栏上的所有控件都不会出现)。令人惊讶的是,另一个页面的Top App Bar工作得很好。 在我的底部应用栏中没有任何特殊内容:只有一些网格,StackPanel和几个应用栏按钮,如第一个代码序列中所示。

这是Top App Bar

  <Page.TopAppBar>
     <CommandBar>

        <CommandBar.SecondaryCommands>

            <AppBarButton Label="Start" Icon="Play" Click="StartButton_OnClick"/>
            <AppBarButton Label="Stop" Icon="Stop" Click="StopButton_OnClick"/>

        </CommandBar.SecondaryCommands>

     </CommandBar>
 </Page.TopAppBar>

这是Bottom App Bar

<Page.BottomAppBar>
    <AppBar IsSticky="True"     
            Width="{Binding Path=MainPageSize.Width}"
            Height="{Binding Path=MainPageSize.Height, Converter={StaticResource  MultiplierConverter}, ConverterParameter='0.15'}" IsOpen="True">

        <userControls:MainPageBottomAppBar/>

    </AppBar>
</Page.BottomAppBar>

变量MainPageSize具有页面的尺寸,BottomAppBar的宽度应该等于页面的宽度,而高度应该是页面高度的15%。如果未激活语言资源,这将完美地工作。问题显然是转换器以某种方式不起作用并使条形图的高度等于页面的高度,并且内容被隐藏(AppBarButtons)。如果我使用Height =&#34; 200&#34; ,比AppBar不再占用整个页面,但内容仍然隐藏。

 public class MultiplierConverter : IValueConverter
   {
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        var a = System.Convert.ToDouble(value);
        var b = System.Convert.ToDouble(parameter);

        return a*b;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

那么有人能告诉我如何解决这个问题吗?

L.E:好的,我发现了这个问题。实际上这有点好笑。英语用法&#34; 。 &#34;对于小数位数,以便在使用英语时0.15将被解释为0.15,但在使用德语时将被解释为15,因为他们使用&#34; ,&#34;小数。问题是我仍然不知道解决问题。是否像文化相关的解析双数?

1 个答案:

答案 0 :(得分:0)

好的,所以我所要做的就是替换

        var b = System.Convert.ToDouble(parameter);

        var b = System.Convert.ToDouble(parameter, CultureInfo.InvariantCulture);

无论如何,谢谢你的帮助! :)