イントレ。
Tag for "WPF"
WPF 4 (VS 2010 and .NET 4.0 Series)
ScottGu's Blogより。
MSDNライブラリよりも詳細に書かれている気がする。
WPF RibbonはCTP扱いでcodeplexにて公開されたみたい。
コントロール群の説明に書かれてたWPF Bag O'Tricksって初めて聞いたけど、なかなか興味のそそるコントロール群が揃ってます。
コントロールじゃないけど、NotifyWorkerとか便利そう。
Bag-o-Tricks March '08 Edition
なんか追いかけるのだけで疲れる・・・。
ScottGu's Blogより。
MSDNライブラリよりも詳細に書かれている気がする。
WPF RibbonはCTP扱いでcodeplexにて公開されたみたい。
コントロール群の説明に書かれてたWPF Bag O'Tricksって初めて聞いたけど、なかなか興味のそそるコントロール群が揃ってます。
コントロールじゃないけど、NotifyWorkerとか便利そう。
Bag-o-Tricks March '08 Edition
なんか追いかけるのだけで疲れる・・・。
Visual Studio 2010 and .NET Framework 4 Beta 2
上記リンクからVisualStudio2010 Beta2の英語版がダウンロード出来るようです。
Expressも含めた全エディションが用意されてますね。
今回はエディションがExpress/Professional/Premium/Ultimateの4つになるみたいです。
StandardがProfessionalに吸収された形かな?
ぶっちゃけ、C#にメインならExpressで困ることはほとんど無いわけですが。
ちなみに、RTMが来年3月22日だそうです。
・・・と書いてある間にインストールが始まってました。
.NET Framework 4のインストールのために再起動要求されるのはBeta1と変わらずですね。
で。
早速起動してみてるんですが、Beta1と比べると立ち上がりは全然早いですね。
WPFのデザイナが立ち上がるのはいつも通り時間がかかってる感じですが・・・
動作自体はキビキビしていて悪くないです。
パフォーマンスチームぐっじょぶ!
今回のベータ版も日本語版が計画されてるということなので、一ヶ月ぐらいしたらリリースされるのかな?
上記リンクからVisualStudio2010 Beta2の英語版がダウンロード出来るようです。
Expressも含めた全エディションが用意されてますね。
今回はエディションがExpress/Professional/Premium/Ultimateの4つになるみたいです。
StandardがProfessionalに吸収された形かな?
ぶっちゃけ、C#にメインならExpressで困ることはほとんど無いわけですが。
ちなみに、RTMが来年3月22日だそうです。
・・・と書いてある間にインストールが始まってました。
.NET Framework 4のインストールのために再起動要求されるのはBeta1と変わらずですね。
で。
早速起動してみてるんですが、Beta1と比べると立ち上がりは全然早いですね。
WPFのデザイナが立ち上がるのはいつも通り時間がかかってる感じですが・・・
動作自体はキビキビしていて悪くないです。
パフォーマンスチームぐっじょぶ!
今回のベータ版も日本語版が計画されてるということなので、一ヶ月ぐらいしたらリリースされるのかな?
WPFのGridのイチ機能で、複数のColumnDefinition/RowDefinition間でサイズを共有出来る。
具体的には同じ名前(SharedSizeGroup)のついたxxxDefinition間で一番サイズが大きいものに揃うみたい。
このとき、Column/Rowのサイズはauto固定で特定のサイズStar(*)は使えない。
また、使うには複数のGridの上の階層(親以上の要素)にGrid.IsSharedSizeScope=Trueを設定する必要がある。
↓実行結果

複数のGridとというか複数のColumnDefinitionでのサイズ共有。
長い方にサイズが合わせられてます。
こういうのはダイアログのOKキャンセルボタンの配置に良いかも?
Gridとか基本中の基本と思って使ってたけど、まだまだ知らないことあるなぁ・・・。
具体的には同じ名前(SharedSizeGroup)のついたxxxDefinition間で一番サイズが大きいものに揃うみたい。
このとき、Column/Rowのサイズはauto固定で特定のサイズStar(*)は使えない。
また、使うには複数のGridの上の階層(親以上の要素)にGrid.IsSharedSizeScope=Trueを設定する必要がある。
↓実行結果

複数のGridとというか複数のColumnDefinitionでのサイズ共有。
長い方にサイズが合わせられてます。
こういうのはダイアログのOKキャンセルボタンの配置に良いかも?
Gridとか基本中の基本と思って使ってたけど、まだまだ知らないことあるなぁ・・・。
WPFのツリービューに欲しい機能がいくつか。
・オーバーフローツールチップ
- アイテムのラベルが表示領域をはみ出している場合に、
マウスをポイントしたら非表示部分も含めてツールチップで表示するやつ。
・FullRow Selection
- アイテムを選択したときの枠が左右めいっぱいに広がってるやつ。
・・・を実現すべく四苦八苦してみたのですが、そろそろ挫折しそうなのでメモ書きでも残す次第w
まずは、オーバーフローツールチップ。
TreeViewItemのツールチップ関連機能をそのまま流用して、表示位置を変えるだけという手抜きをしますw
注意点:
・ToolTipService.Placementで基準点をRelative(=TreeViewItem)にしておく。
・ToolTipService.ToolTipはバインディングでTreeViewItem.Headerと同期させる。
・表示位置の微調整をToolTipService.HorizontalOffsetやToolTipService.VerticalOffsetで行う。
・TreeViewItemの表示がオーバーフローしてるかチェックしてない(=マウスオーバーで常に表示される)。
・汎用的に使うならフォントの同期とか考慮しないとマズいかも。
続いてFullRowSelectなんですが、ControlTemplateでゴニョゴニョするしかないようです。
ネットで拾ったXAMLをベースに少し改造したのですが不完全です。
子要素のマージンの取り方が原因で完全に左端まで選択枠が伸びません・・・。
(+先ほどのツールチップのコードも入ってますw)
ちょっとわかりにくいのですが、最初にGridで領域を2x2に分けています。
+=+=====+
| A | B | A: サブツリー表示・非表示のToggleButton
+=+=====+ B: Header表示用のContentPresenter
| C | D | C-D: サブツリー表示用のItemsPresenter
+=+=====+
元々のソースではDの領域にItemsPresenterを配置していました。
自分はその領域を縮めたかったのでC-D間にBorderを配置してPaddingで調整しています。
・・・ここで上手いことやると完全なFullRowSelectionが実現できるんでしょうけど、考えが思いつきません。
このような配置の後にトリガーを使って背景を変更してます。
AとBがそれぞれ別背景になっているので、ここも構造を変更しないとグラデーションな枠とか使えませんね。
この辺でギブアップ。orz
・オーバーフローツールチップ
- アイテムのラベルが表示領域をはみ出している場合に、
マウスをポイントしたら非表示部分も含めてツールチップで表示するやつ。
・FullRow Selection
- アイテムを選択したときの枠が左右めいっぱいに広がってるやつ。
・・・を実現すべく四苦八苦してみたのですが、そろそろ挫折しそうなのでメモ書きでも残す次第w
まずは、オーバーフローツールチップ。
TreeViewItemのツールチップ関連機能をそのまま流用して、表示位置を変えるだけという手抜きをしますw
注意点:
・ToolTipService.Placementで基準点をRelative(=TreeViewItem)にしておく。
・ToolTipService.ToolTipはバインディングでTreeViewItem.Headerと同期させる。
・表示位置の微調整をToolTipService.HorizontalOffsetやToolTipService.VerticalOffsetで行う。
・TreeViewItemの表示がオーバーフローしてるかチェックしてない(=マウスオーバーで常に表示される)。
・汎用的に使うならフォントの同期とか考慮しないとマズいかも。
続いてFullRowSelectなんですが、ControlTemplateでゴニョゴニョするしかないようです。
ネットで拾ったXAMLをベースに少し改造したのですが不完全です。
子要素のマージンの取り方が原因で完全に左端まで選択枠が伸びません・・・。
(+先ほどのツールチップのコードも入ってますw)
ちょっとわかりにくいのですが、最初にGridで領域を2x2に分けています。
+=+=====+
| A | B | A: サブツリー表示・非表示のToggleButton
+=+=====+ B: Header表示用のContentPresenter
| C | D | C-D: サブツリー表示用のItemsPresenter
+=+=====+
元々のソースではDの領域にItemsPresenterを配置していました。
自分はその領域を縮めたかったのでC-D間にBorderを配置してPaddingで調整しています。
・・・ここで上手いことやると完全なFullRowSelectionが実現できるんでしょうけど、考えが思いつきません。
このような配置の後にトリガーを使って背景を変更してます。
AとBがそれぞれ別背景になっているので、ここも構造を変更しないとグラデーションな枠とか使えませんね。
この辺でギブアップ。orz
スマートなアプリケーションアーキテクチャの構築(1)
プロパティの代わりにフィールドを内包したクラスを用意して、
データの検証などのロジックをデータに持たせるとスマートという触れ込み。
この記事を見つけたのは数ヶ月前で、見つけたときは感心はしたものの使いどころがわからず、
頭の中に入れておくか…程度で済ませてしまった。
今は後悔している。
↑を基点にいろいろ弄ってMVVMに適用したのが↓。
[WPF][C#]データに知能を持たせる
readonlyフィールドで保持していたインスタンスを自動プロパティにすることでWPFとのバインディングに対応。
検証ロジックやModel←→ViewModel間のデータ変換をデリゲートで分離。
これだけでも十二分にViewModelの実装が楽になります。
コンストラクタで初期化する部分が多少複雑になるデメリットはありますが…。
しかし。
IEditableObjectを実装し、ViewModel基底クラスにプロパティ初期化ロジックを組み込むことで、
ViewModel単位でBeginEdit/EndEdit/CancelEditの透過的なサポートを実現しています。
要はMVVMの作り方+プロパティをちょっと弄るだけで、
検証ロジックとデータのロールバック動作がサポート出来るようになるということ。
正直、MVVM Tookitに取り込まれてもおかしくないぐらい凄いと思う。
そして、その可能性に気づけなかった自分の応用力のなさに愕然…。
もっと精進しなきゃ。
プロパティの代わりにフィールドを内包したクラスを用意して、
データの検証などのロジックをデータに持たせるとスマートという触れ込み。
この記事を見つけたのは数ヶ月前で、見つけたときは感心はしたものの使いどころがわからず、
頭の中に入れておくか…程度で済ませてしまった。
今は後悔している。
↑を基点にいろいろ弄ってMVVMに適用したのが↓。
[WPF][C#]データに知能を持たせる
readonlyフィールドで保持していたインスタンスを自動プロパティにすることでWPFとのバインディングに対応。
検証ロジックやModel←→ViewModel間のデータ変換をデリゲートで分離。
これだけでも十二分にViewModelの実装が楽になります。
コンストラクタで初期化する部分が多少複雑になるデメリットはありますが…。
しかし。
IEditableObjectを実装し、ViewModel基底クラスにプロパティ初期化ロジックを組み込むことで、
ViewModel単位でBeginEdit/EndEdit/CancelEditの透過的なサポートを実現しています。
要はMVVMの作り方+プロパティをちょっと弄るだけで、
検証ロジックとデータのロールバック動作がサポート出来るようになるということ。
正直、MVVM Tookitに取り込まれてもおかしくないぐらい凄いと思う。
そして、その可能性に気づけなかった自分の応用力のなさに愕然…。
もっと精進しなきゃ。
Utilities
- タグ
- カレンダー
- 最近の更新
- [日記] サマーウォーズ
- [日記] .NET4→.NET3.5のコード互換性とか。
- [日記] SubversionからMercurialへ。
- [日記] 第4回MMD杯
- [日記] VS2010RC一般公開。
2010-03-052010-03-012010-02-212010-02-162010-02-11
- Adsense