Subnet Designer - アプリリリース ― 2015年03月05日 09:31

「Subnet Designer」の名称で、Windowsアプリをリリース。
IPアドレスから、SubnetやNetmaskを求める計算ツールは、Windowsアプリにもいくつかあるが、人気の練習問題なのか、習作のレベルのものが多く、もう一息、という感じ。改めて作ってみたが、少しは実用的になったか。認証が通るか少し心配したが、無事通過。
使用感は、CiscoのCCNAのSubnetに関する練習問題を解くイメージ。手元にあるのは、Todd LammleのCCNA Study Guideの第7版。4章「Easy Subnetting」の練習問題には、最初の頃、悩まされたが、それらを解いたり、確認するのに役立てば。
審査担当者宛のコメントに書いた例を挙げる。
1)Class Bのネットワークで、29個のSubnetが必要なとき、Netmaskは何になるか。
→コンボボックスでClass Bを選び、Subnet数が29を越えるところまでスライダーを操作すると、答えのNetmaskが求まる。
2)192.168.192.10/29のネットワークのブロードキャストアドレスは何になるか。
→ネットワークアドレスの設定欄に"192","168","192"の順で入力した後、スライダーを操作して"/29"まで移動する。画面上部の「一覧に表示するSubnet」で"2"を選ぶと、画面下部に192.168.192.10を含む一覧が表示され、ブロードキャストアドレスが求まる。
開発時間は、24時間ほど。ロジックには目新しい要素はないが、UI要素が多いので、その分、時間を要した。
技術要素は、こんなところ。
1)WinRT XAML ToolkitのNumericUpDown。Toolkitの中ではマイナかもしれないが、キーボードを使わずに操作を完結させるには有効。
2)画面の下半分は、GridViewを用いているが、データを供給するのにLinqでGroup byが必要。キーをsortと表示に分けて使うことで、並び順とGridViewのグループタイトルの表示を両立。
3)XAMLで、Resource中にStyleを定義して使ってみた。FontSizeなど一括して管理できるのは有用だが、VisualStateの制御でうまく使えず、このあたりは課題。
NumericUpDown - WinRT XAML Toolkit ― 2015年03月05日 10:05

WinRT XAML Toolkitから、今回は、NumericUpDownを利用。少々マイナーなコントロールなのか、検索しても余り実例が見当たらないので載せておく。
上図では、数字の右にマイナスとプラスのアイコンがあるのがそれ。タブレットなどでキーボード入力なしで済ませたいときに便利。
XAMLの実際の記述例。緑の下線を引いた部分が、最初の図の左上のコントロールにあたる。
1)ValueFormat="F0"
数字の書式。今回は整数値なので、"D"としたかったが、例外が発生。代替として"F0"を設定。
2)背景色(Brush)を設定すると、数字の枠の背景がうっすらと透ける。この辺の実装は甘め。今回は、乗っかっているStackPanelの方で背景色を設定。
3)数字枠やプラス・マイナスのアイコンの大きさは変わらないようので、幅と高さの融通は余り利かない。
GridViewのグループ表示で表示名とソートキーを分ける ― 2015年03月05日 10:26

今回は、Subnetの一覧にGridViewのグループ表示を用いたが、グループの並び替えに少々苦戦。図では、横に4つのグループが表示され、「No.1」などとある部分がグループのヘッダ。
GridViewへのデータ供給は、Linq構文で用意し、by句の部分がグループヘッダになる。グループの並び順は、このグループヘッダのソート順で決まる。
※参考:グリッド内の項目をグループ化する方法
※Linq構文とGroupStyleの例が合っていないような気がする。
https://msdn.microsoft.com/ja-jp/library/windows/apps/xaml/hh780627.aspx
https://msdn.microsoft.com/ja-jp/library/windows/apps/xaml/hh780627.aspx
ところが、上図でコメントアウトしている構文では、最初の図で「No.11」を表示しようとすると、そのままでは、No.4の前に出てしまう。表示用の表記では、ソートに向かない。
二つ目の構文では、by句に2つの要素を用い、orderbyで用いる方と、表示に用いる方(GridViewのGroupStyleでバインドする方)を分けている。これで、並び順と表示が両立できる。

ここのItemの定義。最初のGrpKeyがソート用、Nthが表示用。
最近のコメント