日々の開発でぶち当たった疑問解消のプロセスを残していきます。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
-------- : スポンサー広告 :
Pagetop

[Silverlight4]入力可能なコンボボックスを作る

Silverlightには入力可能なコンボボックスがない

すでに多くの方々が直面してきたこの話題、今更ながら自分もぶち当たったので備忘録として残します。

WPFならComboBox.IsEditableプロパティをtrueに設定すれば簡単に書き込み可能なコンボボックスが作れますが、Silverlightの場合はこいつが常にfalseを返す読み取り専用プロパティとして実装されています。しかもオーバーライドもできません。なので全部自分で実装しないと書き込み可能なコンボボックスを使うことができません。

どうやって作るか

私が最終的に採用したのはSilverlight SDKに入っているAutoCompleteBoxと、ToggleButtonを組み合わせる方法。他にも普通のコンボボックスを拡張する方法などいろいろやり方はあると思うのですが、最終的に実装する際のインタフェースが一番しっくりくる、という理由でこの方法を選択しました。Google先生に質問するといろいろ答えてくれるので、その他の方法についてはあまり触れません。

実はAutoCompleteBoxとToggleButtonを組み合わせる方法もWebを検索するといくつか出てきます。その中でも私が採用したオススメはCreating a ComboBox Style AutoCompleteBox Control in Silverlightで紹介されている方法です。他のサイトで紹介されている方法だと、100%ユーザコントロール化できていないものが多く、使用者からすると「確かに実現できているけど使い方がめんどくさい」という感じの仕上がりになっているものが多いです。こちらのサイトで紹介されている方法だと、かなり直観的な使用感に仕上がっていてGOODです。英語サイトですが、実装例だけを追っかければほとんど問題なく実装できるかと思います。

先ほど紹介したサイトの通りに実装すると、1文字以上入力されたときにオートコンプリートが走るようになります。コントロールのテンプレートにコメントが入っていますが、MinimumPrefixLengthプロパティを0に設定すると、オートコンプリートの働くコンボボックスが出来上がります。

具体的には以下の部分を0に変更します。

<!-- The minimum prefix length should be 0 for combo box scenarios -->
<Setter Property="MinimumPrefixLength" Value="1" />

もう一歩先に進むために

Generic.xamlを使ってテンプレートを作ると、開発者がスタイルを意識して記述する必要もなくなります。カスタムコントロールを作る際はこれを使うとすごく楽にデフォルトのスタイルを作れます。カスタムコントロールを配置したSilverlight クラスライブラリプロジェクトに「themes」フォルダを追加し、その中にGeneric.xamlを配置します。

Generic.xamlを作成する場合、紹介したページのStep2で解説されているテンプレートの記述が多少変わりますので注意してください。詳細は「Generic.xaml」で検索するといろいろ情報が出てきますので参照してください。

スポンサーサイト
2011-06-07 : Silverlight : コメント : 0 : トラックバック : 0
Pagetop
コメントの投稿
非公開コメント

Pagetop
« next  ホーム  prev »

プロフィール

masatsuna

筆者:某システム会社のダメSE
競技スキーをこよなく愛するダメSEです。

月別アーカイブ

検索フォーム

ブロとも申請フォーム

この人とブロともになる

QRコード

QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。