[英]C# XAML - Windows 8.1 App Multilingual Resources Issue AppBar
我正在使用C#和XAML為Windows 8.1制作一個應用程序。 所有字符串都位於位於en-GB文件夾中的名為Resources.resw的資源文件中。
我正在使用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上添加了德語作為主要語言,並且在運行應用程序時,顯示了splashcreen並且代碼正在運行,但是突然,當應該顯示我的主頁時,就會出現黑屏。 我試圖再次運行它,以重建項目,但始終都存在相同的問題。 如果我刪除了德語翻譯文件(.xlf),問題就解決了,但是我需要翻譯,所以我又添加了德語翻譯文件,問題又再次出現了……實際上只是在我編寫此線程時我意識到問題實際上是該應用程序的底部應用程序欄(背景為黑色)覆蓋了整個屏幕(但應用程序欄上的所有控件都沒有出現)。 令人驚訝的是,另一頁的“頂部應用程序欄”工作正常。 我的底部應用程序欄沒有什么特別的:只有一些網格,StackPanels和幾個應用程序欄按鈕,如第一個代碼序列中所示。
這是頂級應用欄
<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>
這是底部的應用欄
<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的Width假定與頁面的Width相等,而Height的高度等於頁面的15%。 如果未激活語言資源,這將非常有效。 問題顯然是Converter不起作用,並使Bar的高度等於Page之一,並且內容被隱藏了(AppBarButtons)。 如果我使用Height =“ 200”,則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();
}
}
那么有人可以告訴我如何解決這個問題嗎?
LE:好的,我發現了問題。 實際上,這有點好笑。 英文的十進制數字使用“。”,因此使用英文時0.15將被解釋為0.15,而使用德語時則將0.15解釋為15,因為它們使用“,”代表小數。 問題是我仍然不知道要解決這個問題。 是像文化相關的東西解析雙數嗎?
好,所以我要做的就是更換
var b = System.Convert.ToDouble(parameter);
同
var b = System.Convert.ToDouble(parameter, CultureInfo.InvariantCulture);
無論如何,謝謝您的幫助! :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.