Hatena::ブログ(Diary)

Yuya Yamaki’s blog このページをアンテナに追加 RSSフィード Twitter

2009年03月26日(木曜日)

WPFではコンテンツに対してもデータテンプレートを利用できる

下記のXAMLをWPFとSilverlightの両方で確認すると、表示結果が異なります。


XAML

<ListBox>
    <TextBlock Text="項目1"/>
    <TextBlock Text="項目2"/>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="データテンプレート有効"/>
                <ContentPresenter Content="{Binding}"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>


WPF

f:id:Yamaki:20090326155057p:image


Silverlight

f:id:Yamaki:20090326155122p:image


ItemTemplateのデータテンプレートはItemsSourceを使ったときだけ有効だと思っていましたが、WPFのListBoxコントロールやComboBoxコントロールはコンテンツに対しても有効なようです。なお、なぜかItemsControlを使うと無効になります。


2009年03月25日(水曜日)

Silverlight 3 Beta 1の入力データ検証

以前、WPFとSilverlightの入力データ検証(BindingのValidation)について計8回の投稿を行いました。

入力データ検証 その1

入力データ検証 その2 ErrorTemplate

入力データ検証 その3 HasError添付プロパティ

入力データ検証 その4 Error添付イベント

入力データ検証 その5 DataErrorValidationRule

入力データ検証 その6 カスタムValidationRule

入力データ検証 その7 BindingGroup

入力データ検証 その8 Silverlight 2


今回は、この入力データ検証においてSilverlight 3 Beta 1で新たに追加された内容をご紹介したいと思います。


WPFにあった機能がそのまま実装されたもの

Silverlight 2にはValidationクラスがありませんでしたが、Silverlight 3 Beta 1で追加されました。

MSDN Content Issue


提供されているメンバはErrors添付プロパティとHasError添付プロパティです。HasError添付プロパティを利用して、WPFと同じように「入力データ検証 その3 HasError添付プロパティ」で紹介したような実装を行うことができます(Silverlightにはトリガがありませんので、紹介したような実装をそのまま行うことはできません)。


当然ながらValidationErrorクラスも追加されており、こちらで提供されているメンバはExceptionプロパティのみです。まぁ、相変わらずBindingにValidationRulesプロパティは用意されておらずExceptionによる検証エラーしか使えませんので、ErrorContentプロパティが不要なのは当たり前ですね。


Silverlightには添付イベントの概念がないため、Error添付イベントは提供されていません。Silverlight 2と同様にFrameworkElement.BindingValidationErrorイベントを使用します。


ErrorTemplate添付プロパティも提供されていないのですが、その代わりとなる新しい機能がSilverlight 3 Beta 1では追加されています。それは次の項で紹介します。


WPFとは違う形で実装された機能

Silverlight 3 Beta 1にErrorTemplate添付プロパティは実装されていませんが、その代わりにTextBoxなどのコントロールのControlTemplateにはValidationStatesという新しいVisualStateGroupが追加されました。このVisualStateGroupにはValid、InvalidUnfocused、InvalidFocusedという3つのVisualStateが存在し、Bindingの検証エラーの状態に合わせて各VisualStateが適用されるようになっています。


デフォルトのControlTemplateでは、下記の画像のようにコントロールに赤い枠線が表示され、クリック時、もしくは右上のコーナー部分のマウスオーバーしたときに検証エラーの内容(ValidationErrorから取得したException.Message)が書かれた赤いToolTipが表示されるようになっています。

f:id:Yamaki:20090325134827p:image


デフォルトのControlTemplateをBlendで確認すると、下記のようになります。

f:id:Yamaki:20090325140647p:image


Silverlight 2と比較した場合、ValidationErrorElementが1つ増えただけではないかと思います。ちなみにToolTip部分のControlTemplateは、ほかのコントロールとも共通なためかTextBoxのControlTemplateに内包されてはおらず外に宣言されます。


ステートはこんな感じです。

f:id:Yamaki:20090325141204p:image


ValidationErrorElementとValidationToolTipTemplateを変更することで、下記のようにカスタマイズも自由に行えます。

f:id:Yamaki:20090325141829p:image


ちなみにValidationStatesが組み込まれているコントロールは、

  • TextBox
  • CheckBox
  • RadioButton
  • ComboBox
  • ListBox
  • PasswordBox(Beta 1では未実装?)

となっているようです。


WPFのErrorTemplate添付プロパティを使った方式に比べこちらの方式のほうがすぐれているのは、VisualTransitionを使用できる点ではないかと思います。ErrorTemplate添付プロパティの場合、検証エラー時に表示する外観はControlTemplateで自由にカスタマイズできますが、そのTemplateをどのように表示させるかというのは設定できません。ValidationStatesを使う方式であれば、VisualTransitionを使ってゆっくりフェードインしてくるような表示のさせ方も可能になります。また、Blendのデザイナを使って編集できるという点ももちろん有利な点ですね。


WPFでもバージョン4からVisualStateManagerが導入されるそうですので、このValidationStatesも実装されるのではないかと思います。その場合、デフォルトのErrorTemplateは空になりそうですね。


2009年03月19日(木曜日)

Silverlight 3 Beta 1 Links

日本語


Visual Studio 2008 SP1 用 Microsoft® Silverlight™ 3 Tools Beta 1

http://www.microsoft.com/downloads/details.aspx?FamilyID=11dc7151-dbd6-4e39-878f-5081863cbb5d&DisplayLang=ja


Microsoft® Silverlight™ 3 ソフトウェア開発キット Beta 1

http://www.microsoft.com/downloads/details.aspx?FamilyID=d09b6ecf-9a45-4d99-b752-2a330a937bc4&DisplayLang=ja



英語


Microsoft Expression Blend 3 Preview

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=a04aa0ae-87be-4201-a65e-e792859122fc


Silverlight Toolkit March 2009 changes

http://silverlight.codeplex.com/Wiki/View.aspx?title=Silverlight%20Toolkit%20March%202009%20change%20list&referringTitle=Home


Silverlight 3 Beta - Windows Developer Runtime

http://download.microsoft.com/download/0/D/7/0D76C405-E0E5-43CC-89D3-18243A4FCA86/Silverlight.3.0_Developer.exe


Silverlight 3 Beta - Mac Developer Runtime

http://download.microsoft.com/download/D/7/8/D7874F60-6B12-4859-BE73-393D4ECDFD99/Silverlight.3.0_Developer.dmg


Eclipse Tools for Microsoft Silverlight

http://eclipse4sl.org/download/mac/


MSDN > MSDN Library > Web Development > Silverlight > Silverlight 3 Beta

http://msdn.microsoft.com/en-us/library/cc838158(vs.96).aspx


Silverlight 3 SDK CHM File

http://download.microsoft.com/download/3/C/C/3CC847B9-5F5C-4707-B216-600791B9DA5B/silverlight3_beta_docs.zip


Videos : The Official Microsoft Silverlight Site

http://silverlight.net/learn/videocat.aspx?cat=12


A guide to Silverlight 3 new features

http://timheuer.com/blog/archive/2009/03/18/silverlight-3-whats-new-a-guide.aspx


Microsoft .NET RIA Services March '09 Preview

http://www.microsoft.com/downloads/details.aspx?FamilyID=76bb3a07-3846-4564-b0c3-27972bcaabce&displaylang=en


Expression Blend 3 Previewの新機能 その1

What’s New in Expression Blend 3 Preview


1.Importing Photoshop and Adobe Illustrator files


f:id:Yamaki:20090319144508p:image


2.Effects


f:id:Yamaki:20090319144828p:image


3.Gradient tool improvements


f:id:Yamaki:20090319150725p:image


(a)reverse gradient stops

gradient stopsを反転させるボタン

(b)Select previous gradient stopとSelect next gradient stop

次のgradient stopを選択できるボタン(これまでgradient stopが重なっていると選択するのが大変だった。)

(c)Select gradient stop offset

ドラッグではなくパーセンテージでgradient stopのoffsetを設定できる。

(d)RelativeTransform

これまでBlend上からは設定できなかったRelativeTransformを設定できる。


4.Layout operation improvements


UI要素はマウスオーバー時に青枠線が表示されるので選択しやすい。

グルーピングや再配置時にレイアウトやバインディングのプロパティが勝手に変更されたりしない。


5.Design-time annotations


f:id:Yamaki:20090319153251p:image



<Button Margin="10,10,10,10" Content="Button">
    <Anno:AnnotationManager.Annotations>
        <Anno:Annotation Author="Yuya Yamaki" AuthorInitials="YY" Left="282" SerialNumber="1" Timestamp="03/19/2009 06:33:14" Top="83" Text="このボタンはStackPanelに配置された2番目のボタンです。"/>
    </Anno:AnnotationManager.Annotations>
</Button>


アノテーションは添付プロパティとして付加され、実行時には表示されない。


6.Creating templates from artwork


f:id:Yamaki:20090319160450p:image


これまではボタンの作成のみだったが、ほかのコントロールも素材から作成することが可能な「Make into Control...」が登場。


f:id:Yamaki:20090319162142p:image


f:id:Yamaki:20090319161842p:image

コントロールテンプレート編集時には、そのコントロールに必要なパーツが表示されそれを配置、もしくはほかの要素をそれらのパーツに変換することが可能になった(これでテンプレート構造を完全に理解していなくともテンプレートデザインができるということで、一歩デザイナ寄りに近づいた?)。


7.Improved support for VSM


これまではテンプレート内でVSMが全く定義されていないとステートのパネルには何も表示されなかったが、3 Previewでは定義されていなくともコントロールが持っているステートについては自動的に表示されるようになった。


8.State pinning


1つのステートをプレビューさせておき、その状態でほかのグループのステートを重ね合わせてプレビューさせることができるようになった(例:ButtonのDisabled[CommonStatesグループ]とFocused[FocusStatesグループ])。


9.Editing state transitions


State transition(日本語版Blendでは[切り替え効果])がオブジェクトとタイムラインパネルでも編集可能になった。


10.Drawing into state


ステートの選択時に新しい要素を追加すると、その要素はそのステートのときにだけ表示されるよう、Opacityプロパティを使ったアニメーションが自動的に作成、追加される。


11.XAML, C#, and Visual Basic Code Editing


f:id:Yamaki:20090319170357p:image


XAMLでIntelliSenseが使える。


f:id:Yamaki:20090319170819p:image


C#、Visual Basicのコードが書け、IntelliSenseも使える。



その1はここまでです。時間が取れればその2も投稿します。


2009年03月06日(金曜日)

「WPF入門 XAML編」のご紹介

下記の404 - ファイルまたはディレクトリが見つかりません。というblogでkazutoさんという方がXAMLの構文について詳しく解説されており、とても良いコンテンツだと思いましたのでここでご紹介させていただきます。


WPF入門 〜XAML編[概要]〜

WPF入門 〜XAML編[構文1]〜

WPF入門 〜XAML編[構文2]〜

WPF入門 〜XAML編[構文3]〜

WPF入門 〜XAML編[構文4]〜

WPF入門 〜XAML編[名前空間]〜

WPF入門 〜XAML編[構文5]〜


内容は私がTech·Ed 2008 Yokohamaでやらせていただいたセッション「TH-304 開発者なら知っておきたい XAML の書き方」の内容をちょうどカバーしており、WPFに限らずSilverlightでもXAML構文の理解において役立つ内容だと思います。


XAML構文を理解したいという方は是非読んでいただきたい内容です。


2009年03月04日(水曜日)

コミュニティ勉強会に参加しよう 仙台編

3月28日(土)に仙台でコミュニティ勉強会が開催されます。

Nothing found for Event Sendai

INETA & techbank.jp & PowerShell from Japan!! & HIRO’s.NET 合同勉強会 in 仙台

2009/03/28(土) 13:00〜16:30

マイクロソフト 東北支店(仙台) セミナールーム


内容は、SQL Server 2008のセッションが1つとPoswerShellに関するセッションの2つです。

  • 『デベロッパー向け SQL Server 3つの性能ポイント』
  • PowerShell入門』
  • 『PowerShell関連(お題未定)』


仙台では貴重なコミュニティ主催の勉強会です。一般的なベンダー系のセミナーとは異なり、同じ立場の人がお互いに情報共有や相談をすることができるというのがコミュニティ勉強会の良い部分だと思います。私も参加予定ですので、東北在住でコミュニティ勉強会に興味があるという方は、是非この機会にご参加いただければと思います。