新型Surface公式発表された

Surface Blogに、Surface 2, Surface Pro 2の情報が出ています。

プレオーダー用のページも準備されていますが、まだオーダーはできないようです。※プレオーダーが可能になった模様(制限あり)

Surface Pro 2
画像からカバーの新色も紫色もあるようです。

Docking Station for Surface Pro includes Mini DisplayPort video output, three USB 2.0 ports and one USB 3.0 port, an Ethernet port, and 3.5mm audio in and out.
Pro2用のようですが、ドッキングステーションによるポート拡張が行えるようです。

OSは Windows RT 8.1 and Windows 8.1 Proが搭載
機体のキックスタンドは二段階調整可能
SurfaceはProと同じくフルHD解像度に
SurfacePro2に第4世代IntelCore i 5、ストレージに512GBが追加されています
Surface2はTegra4搭載
Surface Music Kitというミキサー型タイプカバーが登場
2014年予定ではあるもののバッテリー付きタイプカバー、Power Coverが出るので、Proでもほぼ一日持つようになりそうですね

色々展開がされるようですが、日本はいつになるかですかねー

Windowsストアアプリでの物理キーボードの有無

物理キーボードの有無を確認することで、「キーボード操作」とタブレットでの「コントローラーUI操作」の表示切替を実装することができる。

「KeyboardCapabilities Class」を使用して確認
「KeyboardPresent」が読み取り専用であるので、これを確認すること。

下記のページで確認したもの
http://msdn.microsoft.com/ja-jp/library/windows/apps/windows.devices.input.keyboardcapabilities.aspx

Windowsストアアプリで使用できるグラフコントロール

Modern UI (Metro) Charts for Windows 8, WPF, Silverlight
License:Microsoft Public License (Ms-PL)

・これから調べる

WinRT XAML Toolkit
License:The MIT License (MIT)
上記のチャートは「Windows 8 Toolkit – Charts and More(License:Common Development and Distribution License (CDDL))」からのポート
・これから調べる
・WinRT XAML ToolkitはどうやらWin8.1ベースでVS2013になっている模様

どちらもベータで、「Modern UI (Metro) Charts for Windows 8, WPF, Silverlight」には折れ線グラフはまだない

有料であれば、下記のようなものもあります。
NetAdvantage for Windows UI

デスクトップでWindowsRuntimeAPIを使う場合の忘備録

MSエヴァンジェリストのVS魂100連発から
http://www.youtube.com/watch?v=xmwTbfWKDyA

・最初の設定
デスクトップアプリのプロジェクトをいったん「プロジェクトのアンロード」を行う
アンロードしたプロジェクトを右クリックして「.csprojの編集」をクリック
「PropertyGroup」内に「TargetPlatformVersion」を追加して「8.0」とする
上書き保存したらプロジェクトを再読み込みする
「参照設定」から「参照の追加」をクリックすると左側に「Windows」が増えているのでコアから「Windows」を追加
「ブラウズ」から「参照」で「\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5」から「System.Runtime.dll」を追加する。
「using Windows.Foundation;」を追加する。
「System.Runtime.dll」は.NETのCollectionとRTのCollectionに互換性がないため、その互換変換のために必要になる。

・async/awaitの非同期に対応する
「参照設定」から「参照の追加」をクリック
「ブラウズ」から「参照」で「\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5」から「System.Runtime.WindowsRuntime.dll」「System.Threading.Tasks.dll」の二つを追加
これを追加することで「async/await」が使用可能になる。
使わない場合「IAsyncOperation」をもとに書くようにする。

今更ながらの忘備録、これでストアアプリ管理ツールの作成などにもWindowsRuntimeAPIを使える。

indexを指定可能なIntデータCollectionProperty

collectionなPropertyにIndexを指定して通知したい場合に下記のように行う
通常ではIndex指定でやり取りはできないと思うのでメモがてら

    /// <summary>
    /// IntデータcollectionProperty
    /// </summary>
    public class CollectionDataProperty : CryEarth.lib.cryearthlib.NotifyPropertyChangedMethod
    { 
        private readonly Collection<int> items = new Collection<int>();

        public CollectionDataProperty()
        {
            items.Clear();
        }

        public int this[int index]
        {
            get
            {
                // indexの境界チェック
                if (items.Count < index)
                {
                    return 0;
                }
                return items[index];
            }
            set
            {
                //indexの境界チェック
                if (items.Count < index+1)
                {
                    items.Add(value);
                }
                else if (items[index] == value)
                {
                    return;
                }
                else
                {
                    items[index] = value;
                }
                OnPropertyChanged(ITEMS);
            }
        }

        private const string ITEMS = "Item[]";
    }

デバッグ用のメモ

TDDを徹底すればこれはあまり必要ないかもしれないが、あって困るものではないので、メモ代わりに書いておく
公式サンプルなどから集めたものなので、あまりきれいではない。
機能を追加するとすれば、ローカルストレージ(またはSQL)への保存機能を追加することで、追いかけやすくなるのではないかと思われる。

using System.Runtime.CompilerServices;
public static class DebugLoging
{
// WinRTコアイベントのDispatcher
// 使用する際は「Window.Current.Dispatcher;」を渡すこと
// debug情報ページをInFreamに読み込んでいる
public static CoreDispatcher coreDispatcher;
// 書き出しに使用するTextBlock
public static TextBlock debugOutputTextBlock;

// Cでのマクロ、__LINE__ , __FILE__ や
// C#(WindowsPhone)でのStackFram は使用できないので、
// C#5.0の「System.Runtime.CompilerServices」を使用する
public static async void DebugPrint(string msg,
[CallerFilePath] string file = "",
[CallerLineNumber] int line = 0,
[CallerMemberName] string member = "")
{
var fullMessage = string.Format("{0}:{1}\r\n\t{2}: {3}", file, line, member, msg);

Debug.WriteLine(fullMessage);

if (coreDispatcher != null)
{
await coreDispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
debugOutputTextBlock.Text =
debugOutputTextBlock.Text +
DateTime.Now.ToString(@"M/d/yyyy hh:mm:ss tt") + " " + fullMessage + "\r\n";
});
}
}
}

PageのFrame読み込みに関するメモ

PageをNavigationでそれぞれ個別ページ遷移呼び出しではなくFrameを宣言して、その中に読み込むことができる。
所謂HTMLでいうところの「iframe」のような形が可能

・元PageでのXAML宣言

<Frame x:name="otherPageFrame" />

・元ページでの呼び出し

otherPageFrame.Navigate(typeof(OtherPage), this);

PageをFrameとして入れ込んでいるため、各ページでコードを管理できるが、呼び出し順(Loadedイベントで特に)などで問題が起きやすいものと思われる
UIコントロールが有効になっていない時に読み込むことはできないので、当たり前とは思われる。
・直接LoadedイベントをXAMLに宣言せず、「InitializeComponent()」の後、または「OnNavigatedTo」でイベントを有効化する
・「OnNavigatedFrom」でイベントを解除するのを忘れないこと

//まだまとまっていないので、掘り下げること