Archive for 2012年5月

Windows Phone のアプリを10か国語対応したら

2012年5月24日

Windows Phone アプリがどのぐらい各国で使われるのか、興味深かったので、初めて作った簡単なアナログクロックのアプリをいわゆるヨーロッパ主要6か国語 EFDISP、+ロシア、+Simplified Chinese、Traditional Chinese, Korean の10か国語対応して アップしてみました。その結果、数日ですが、次のような結果に・・・。日本1件に対して、全世界で41件って!

グローバル対応してみるものですね。

Australia 1
Brazil 1
China 1
Czech Republic 2
Germany 3
Denmark 1
Spain 1
Finland 1
France 3
United Kingdom 3
Hong Kong SAR 2
Italy 2
Japan 1
Mexico 1
Malaysia 1
Norway 1
Poland 1
Russia 4
Sweden 2
United States 4

Visual Studio 11 がロンチ間近のようですね。

2012年5月23日

Windows 8 Metro スタイル アプリケーション開発が可能になるVisual Studio 11 がロンチ間近のようですね。

vs2011

主なカルチャ

2012年5月10日

いわゆるヨーロッパ主要6か国語 EFDISP、+ロシア、+Simplified Chinese、Traditional Chinese, Koreanはよく使いそうなので、リストしておきます。

言語
カルチャ 場所
英語 en-US 米国
フランス語 fr-FR フランス
ドイツ語 de-DE ドイツ
イタリア語 it-IT イタリア
スペイン語 es-ES スペイン
ポルトガル語 (ポルトガル) pt-PT ポルトガル
ロシア語 ru-RU ロシア
中国語 – 簡体字 zh-CN 中華人民共和国
中国語 – 繁体字 zh-TW 台湾
韓国語 ko-KR 韓国
日本語 ja-JP 日本

<SupportedCultures>
  ja-JP;ko-KR;zh-CN;zh-TW;en-US;fr-FR;de-DE;it-IT;es-ES;pt-PT;ru-RU;
</SupportedCultures>

大きな画像の描画

2012年5月4日

Windows Phone 用アプリケーションのパフォーマンスに関する考慮事項より、2000 pixel より大きな画像だと、極端に描画が遅くなります。

対応としては、このサイズを超えないように、WritableBitmap に読み込んでから、LoadJpeg を実行します。これにより、ファイルの一部分だけを表示することができます。


<Image Height=”3000″ Width=”3000″ Name=”image1″ Stretch=”Fill” />

StreamResourceInfo sri = null;
Uri uri = new Uri(“大きな画像.png”, UriKind.Relative);
sri = Application.GetResourceStream(uri);

WriteableBitmap wb = new WriteableBitmap((int)this.image1.Width, (int)this.image1.Height);
wb.LoadJpeg(sri.Stream);
this.image1.Source = wb;

アプリケーションライフサイクル関連

2012年5月2日

App:  コンストラクター

App: Launching(object sender, LaunchingEventArgs e)

// アプリケーションが起動するとき
// アプリケーションが再アクティブ化済みの場合には実行されません

App: Activated(object sender, ActivatedEventArgs e)

// アプリケーションがアクティブになったとき
// アプリケーションの初回起動時には実行されません

Page: OnNavigatedTo

//ページがフレーム内のアクティブなページになったとき
// ページのビジュアル ツリーがまだ完全には構築されていません
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
   …
    base.OnNavigatedTo(e);
}

Page: OnNavigatedFrom

// ページがフレーム内のアクティブなページでなくなったとき
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
   …
    base.OnNavigatedTo(e);
}

App: Deactivated(object sender, DeactivatedEventArgs e)

// アプリケーションが非アクティブになったとき
// アプリケーションの終了時には実行されません

App: Closing(object sender, ClosingEventArgs e)

// アプリケーションが終了するとき
// アプリケーションが非アクティブになっているときには実行されません

RootFrame: Obscured

// フレームがシェル クロムで覆われるとき
// 他のアプリケーションに移動された場合は発生しません。
RootFrame.Obscured += new EventHandler<ObscuredEventArgs>(RootFrame_Obscured);

void RootFrame_Unobscured(object sender, EventArgs e)

RootFrame: Unobscured

// フレームがシェル クロムで覆われなくなったとき

RootFrame.Unobscured += new EventHandler(RootFrame_Unobscured);

void RootFrame_Obscured(object sender, ObscuredEventArgs e)

App.xaml.cs のパターン

2012年5月2日

Charles Petzold のProgramming Windows Phoneのpp128に掲載されているパターンです。

using System.IO.IsolatedStorage;

private void Application_Launching(object sender, LaunchingEventArgs e)
{
    LoadSettings();
}
private void Application_Activated(object sender, ActivatedEventArgs e)
{
    LoadSettings();
}

private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
    SaveSettings();
}

private void Application_Closing(object sender, ClosingEventArgs e)
{
    SaveSettings();
}


public int MyValue= 123;
public bool IsOk= false;

private void LoadSettings()
{
    var settings = IsolatedStorageSettings.ApplicationSettings;
    if (settings.TryGetValue<int>(“MyValue”, out MyValue) == false)
        MyValue= 999;
    if (settings.TryGetValue<bool>(“IsOk”, out IsOk) == false)
        IsOk= false;
}

public void SaveSettings()
{
    var settings = IsolatedStorageSettings.ApplicationSettings;
    settings[“MyValue”] = MyValue;
    settings[“IsOk”] = IsOk;
    settings.Save();
}


(Application.Current as App).MyValue = 256;
(Application.Current as App).IsOk= true;