2011年11月23日水曜日

CLR/H 第 64 回勉強会レポート

11/19 に行われた CLR/H 勉強会のレポートです。今回も前回に続き Deep Dive! な回ということもあり、深い話が多い回となりました。

PB190586

2011年11月22日火曜日

IExpressionEditorService と IEXpressionEditorInstance でインテリセンスの導入

ある程度 WF の ExpressionTextBox で式や値の入力中にインテリセンスを利用するように実装できてきたので、その利用方法や注意点をまとめてみます。

まず WF での ExpressionTextBox におけるインテリセンスサポートですが、Visual Studio 上でワークフローを触られている場合は Visual Studio が提供するインテリセンスが自動で利用されています。しかし再ホストを行っているケースでは、自前でインテリセンス部分を用意しなくてはいけません。海外 MSDN だと VIsual Studio のアドイン Dll をそのまま利用してしまえという豪快な方法を目にすることがありますが、配布が出来ませんので自分一人の環境で利用する場合のみ許される方式です。

2011年11月19日土曜日

CLR/H 第 64 回勉強会での LT スライド

本日 11/19 に行われている CLR/H 第 64 回勉強会にて発表した LT スライドを公開します。今回は WF を利用して WPF アプリを作ってみよう、という題材です。もう少しあれこれできれば、ノベルゲーなら十分作れるんじゃないかな、と思いますw

2011年11月15日火曜日

ワークフロー上のアクティビティを非同期に複数動作させるには

原則として Workflow Foundation は非同期にて動作しますが、俗に言うマルチスレッドにタスクを分配して動作するような挙動は行いません。Parallel アクティビティというのもありますが、これも内部ではシングルスレッドで動作しており、待ち状態が発生した際に制御を切り替えるというものになっています。

このあたりで色々考える人は多いのですが、海外の Blog ですばらしいサンプルを見つけたので VB に移植してみました。

2011年11月9日水曜日

属性指定から IRegisterMetadata.Register へ

前回の LocBAML を利用した記事にあるように、現在拙作の WFDesignerExpress を多言語対応(といっても機械翻訳での対応ですが……)を行っています。その際に非常に感じたのは、クラスやプロパティに対して属性を設定するのではなく、IRegisterMetadata.Register メソッドにて属性の設定を行うようにするのが、WPF や WF でのプログラミングを行う際に適している、というところです。

2011年11月7日月曜日

.NET 4 における LocBAML を利用した多言語対応

アプリケーションの多言語化対応というのは、人によっては必要な作業だと思います。MSDN でもローカライズ関係の資料が色々と掲載されており、その中の一つの方法として LocBaml ツールを利用したローカライズがあります。

2011年11月6日日曜日

InArgument(T) から String への変換

アクティビティを色々作成している中で、次のようなケースがありました。

  • デザイナ上で指定した画像のイメージをデザイナ上にプレビュー表示する

アクティビティのプロパティとしてファイル名を受け取るとして、そのファイル名で指定された画像をデザイナ上でプレビュー表示をする、というものです。その際にプロパティが String で指定されているのであればまだ簡単なのですが、アクティビティの場合ほとんどのプロパティは InArgument(T) を指定することもあり、値の変換には少し方法を変える必要があります。

2011年11月4日金曜日

Zip 圧縮を外部ライブラリ無しで行うアクティビティ

WF でファイルやフォルダ操作を行う上で必要性を非常に感じているのが Zip 圧縮。バッチスクリプト等での定型処理でも結構使われているのではないでしょうか。

これを実際に .NET で行おうとすると何種類かの選択肢から方式を選ぶことになると思います。

  1. J# ライブラリを利用する
  2. DotNetZip 等の外部ライブラリを利用する
  3. Windows 標準機能を利用する

自分が今まで利用していたのは(1)の方法で、これだと MS 純正コンポーネントのみで済み、かつ結構楽な手段でサンプルもごろごろ転がっていたと思います。ところが、.NET 4 から J# を利用するというのが結構面倒でそのままでは利用できないため WF から利用するのは躊躇していました。
そうなると(2)か(3)なのですが、(2)のように外部ライブラリを利用するのは最も楽で安定するのですが、気持ちとして参照 Dll がどんどん増えていく事が嫌いというのもあり却下。必然的に(3)の方法となってしまいます。

2011年11月2日水曜日

MessageBoxIcon の値を IValueConverter で変換

メッセージボックスを表示するアクティビティを作っていて、デザイナ上でアイコンやボタンの設定をラジオボタンにて選択させようとした時、MessageBoxIcon 列挙値を変換するような IValueConverter を用意してあげれば、ラジオボタンにバインドができて非常に楽になります。ただし、その際に少しだけ注意する点がありました。

2011年11月1日火曜日

アクティビティの検証(2)

前回は属性による指定と CacheMetadata メソッド内部での検証ロジック実行という方法を利用しましたが、今回は制約(Constraint)による検証を行ってみます。制約とは MSDN にも記載されている通り「検証ロジックを含むアクティビティ」となっています。そのためコードだけでなく XAML によっての作成も可能です。