...

4.4 コントロール - Microsoft

by user

on
Category: Documents
5

views

Report

Comments

Transcript

4.4 コントロール - Microsoft
Chapter 4 Silverlight アプリケーション開発 基本編
4.4 コントロール
図 4-18 コンテンツの切り替え後
4.4 コントロール
ユーザー インターフェイスとコントロール
Silverlight アプリケーションのユーザー インターフェイスは、「3.1 最初に作るアプリケー
ション」(⇒ p. 30)で説明したように、コントロールを配置して、コントロールのイベント
ハンドラーを作成し、そのイベント ハンドラーにコードを記述して作成します。見た目を変
[バージョン情報]の部分は HyperlinkButton コントロールで、NavigateUri プロパ
ティにバージョン情報のページへの URI が設定されています。
ナビゲーション フレームワークの仕組みは、図 4-19 のようになっています。アプリケーショ
ンの中にフレームがあり、そのフレーム内にページを表示させます。ページを複数用意してい
ると、表示させるページを変えることにより見た目を変えることができます。
ページ1
(Page1. xaml)
ユーザー インターフェイスを構築するために必要なことは、どのようなコントロールがあ
るか、そのコントロールがどのような機能を持っているか、そしてどのようなイベントに対応
したイベント ハンドラーを作成できるかを知ることです。作りたいアプリケーションの仕様
にしたがい、適切なコントロールを選んで配置します。
構築するユーザー インターフェイスの仕様に合わせてどのようなコントロールを選ぶべき
かを列挙し、主なプロパティとイベントについても説明しています。
図 4-19 ナビゲーション フレームワークの仕組み
フレーム
えるときは、プロパティを変更します。
ページ2
(Page2. xaml)
テキスト表示
文字を表示させるときは、Label コントロールまたは TextBlock コントロールを使用し
ます。どちらも任意の文字列を任意のフォントおよびフォント サイズで表示させることがで
きます。Label コントロールは、背景に特定の色や画像を貼り付けることができるなど、
ページ3
(Page3. xaml)
ページ 4
(Page4. xaml)
TextBlock コントロールと比べて機能が豊富です。一方、TextBlock の利点は、軽量で
あるということと、改行ができるということです。改行するには、TextWrapping プロパティ
を「Wrap」に変更します。
表示させたい文字は、Label コントロールの場合は Content プロパティ、TextBlock
コントロールの場合は Text プロパティに代入します。どちらのコントロールも、FontSize
プロパティで文字の大きさを変えたり、Foreground プロパティで文字色を変えられます。
テキスト入力
文字の入力には、TextBox コントロールを使用します。入力した文字は、Text プロパティ
に入ります。Text プロパティにあらかじめ文字列を代入していると、その文字が TextBox
の中に表示されます。TextBlock コントロールと同様に、FontSize プロパティや Fore
ground プロパティで文字の大きさや色を変えることもできます。複数行の文字列を入力さ
せるときは、AcceptsReturn プロパティを「true」に変更します。デフォルトでは、1
行の文字列しか入力できません。
60
61
Chapter 4 Silverlight アプリケーション開発 基本編
4.4 コントロール
TextBox コントロールに文字を入力すると、TextChanged イベントが発生します。グ
配がありません。入力された文字列は、Password プロパティに入ります。
ラフィカル デザイン ビュー上に表示されている TextBox コントロールをダブル クリックす
入力中の文字列を隠すために表示されるキャラクターは、PasswordChar プロパティに
ると、TextChanged イベントに対応したイベント ハンドラーが生成されます。TextBox
よって変更できます。
コントロールに表示されている文字列が変更されるたびに何らかの処理を行いたいときは、こ
PasswordBox コントロールはデフォルトの状態ではツールボックスに表示されていませ
のイベント ハンドラーを使用します。
んので、使用するときはツールボックスのコントロールの上で右クリックし、
[アイテムの選択]
RichTextBox コ ン ト ロ ー ル を 使 用 し て も、 文 字 の 入 力 お よ び 表 示 が で き ま す。
をクリックして、
[Silverlight コンポーネント]タブにある[PasswordBox]にチェックを入れま
RichTextBox コントロールは、個別の文字の色やフォントを変えることができる書式付き
す。
テキストを表示できます。
数値の変更
入力候補の表示
こ の よ う な 場 合 に は、AutoComplete
数値の変更をマウスで行いたいような場合
図 4-20 AutoCompleteBox コントロール
Box コントロールを使用します。入力候補
テキストボックス
の情報は、ItemsSource プロパティに設
定します。ItemsSource プロパティへの
ドロップダウン
設定はプロパティ ウィンドウで行わず、 リ
選択アダプター
図 4-22 NumericUpDown コントロール
には、NumericUpDown コントロールを使
用します。 図 4-22 の右側にある三角の印が
ついたボタンをクリックすることにより、値
が変化します。値は Value プロパティに格納されます。
値が変更されたときには、ValueChanged イベントが発生します。Minimum プロパティ
スト 4-13 のようなコードを用意します。こ
で最小値、Maximum プロパティで最大値を設定できます。Increment プロパティによって、
のコードを実行し、AutoCompleteBox コ
クリックしたときに変化する値を変えられます。
ントロールに「a」と入力すると、図 4-20 のように表示されます。
AutoCompleteBox コントロールは、通常はテキスト ボックスの部分しか表示されてい
ません。文字を入力することにより、候補となる文字列がドロップ ダウンとして表示されます。
ドロップ ダウンに表示されている部分を選択アダプターと呼びます。
ボタン
ボタンを配置するには、Button コントロールまたは RepeatButton コントロールを使
用します。Button コントロールおよび RepeatButton をクリックしたときには Click
リスト 4-13 ● AutoCompleteBox の入力候補の設定
イベントが発生しますので、対応したイベント ハンドラーを用意することで、ボタンをクリッ
List<string> itemList = new List<string>();
itemList.Add("abcdef");
itemList.Add("abcddd");
itemList.Add("abbbbb");
itemList.Add("aaaaaa");
itemList.Add("bcdefg");
autoCompleteBox1.ItemsSource = itemList;
クしたときに用意したコードを実行できます。Button コントロールをクリックしたときは、
クリックするたびに Click イベントが発生します。RepeatButton の場合は、クリックし
たあとボタンを押しっぱなしにしていると、連続して Click イベントが発生します。クリッ
クした直後に Click イベントが発生し、次の Click イベントは Delay プロパティで設定
しているミリ秒後に発生します。その後は、Interval プロパティで設定しているミリ秒ご
とに Click イベントが発生します。デフォルトでは、Delay プロパティに 500 ミリ秒、
Interval プ ロ パ テ ィ に 33 ミ リ 秒 が 設 定 さ れ て い ま す。 ど ち ら の コ ン ト ロ ー ル も、
パスワード
パスワードの入力には、PasswordBox
62
Content プロパティに設定した文字列をボタンの上に表示します。
図 4-21 PasswordBox コントロール
RepeatButton コントロールは、デフォルトの状態ではツールボックスに表示されていな
コントロールを使用します。PasswordBox
いので、使用するときはツールボックス中のコントロールの上で右クリックし、
[アイテムの選
コントロールは、入力中の文字が自動的に隠
択]をクリックして、
[Silverlight コンポーネント]タブにある[RepeatButton]にチェックを入れ
されるため、入力している文字を見られる心
ます。
63
Chapter 4 Silverlight アプリケーション開発 基本編
4.4 コントロール
例では、
[選択肢 その 1]が選ばれています。
[選択肢 その 2]をクリックすると、
[選択肢 その 1]
ハイパーリンク
ハイパーリンクを配置するには、Hyper
に入っているチェックがなくなり、
[選択肢 その 2]にチェックが付きます。
図 4-23 HyperlinkButton
Content プロパティには、表示させたい文字列を入れます。GroupName プロパティに値
linkButton コントロールを使用します。
を設定すると、同じ GroupName を持つ RadioButton コントロールがグループ化されます。
このコントロールは、特定の Web ページに
RadioButton コントロールをクリックすると、Click イベントが発生します。
ジャンプできますし、普通のボタンのよう
RadioButton コントロールは、選択肢が比較的少ないときで、選択肢の数が変わらない
に特定のコードを実行させるときにも使用できます。
ときに使用します。
HyperlinkButton コントロールは、実行時には単に文字列が表示されているだけですが、
ListBox コントロールは、いくつかの選
マウスをコントロール上に移動させると図 4-23 のように下線が表示されます。表示させる文
択肢の中から選ぶことができるコントロール
字列を変えるには、Content プロパティを変更します。クリックすると、Click イベント
です。 図 4-26 のように、選択肢をリスト形
が発生します。NavigateUri プロパティに特定の URI が指定されていると、クリック時に
式 で 提 示 し ま す。 選 択 肢 の 登 録 に は、
そのページに移動します。
Items プロパティを使用します。
図 4-26 ListBox コントロール
プロパティ ウィンドウの Items と書かれ
たところの右側にある
チェックボックス
二者選択の状況があり、ユーザーにどちら
ボタンをクリックすると、 図 4-27 のように[コレクション エディ
ター]ダイアログが表示されます。
図 4-24 CheckBox
ここで[追加]ボタンをクリックして、ListBox コントロールに追加する項目を指定します。
の 状 態 か を 選 択 し て も ら い た い と き は、
[追加]ボタンをクリックして Content
ListBox コントロールに表示させる項目の数だけ、
CheckBox コ ン ト ロ ー ル を 使 用 し ま す。
プロパティに表示させたい文字列を入力します。選択肢の登録には、ItemsSource プロパ
CheckBox コントロールをクリックするこ
ティを使用することもできます。
とにより、チェックが入っていない状態と
ListBox コントロール上で選択した項目は、SelectedItem プロパティで取得できます。
入っている状態を切り替えられます。
SelectedIndex プロパティには、選択された項目の番号が入ります。選択している項目が
図 4-24 は、チェックされていない状態とチェックされている状態を表しています。チェッ
変わった場合は、SelectionChanged イベントが発生します。
ク さ れ て い る か ど う か は、IsChecked プ ロ パ テ ィ に 反 映 さ れ ま す。 中 間 状 態 は、
ListBox コントロールは、選択肢の数が多い場合や、選択肢の数が変わる可能性がある場
IsThreeState プロパティを「True」に設定したときに現れる状態です。Content プロ
合に使用します。
パティには、表示させたい文字列を入れます。
チェックの状態を変更すると、Checked イベントが発生します。
図 4-27 コレクション エディター
項目の選択
いくつかの選択肢から 1 つを選択させた
図 4-25 RadioButton
いような場合には、RadioButton コント
ロールか ListBox コントロール、または
ComboBox コントロールを使用します。
RadioButton コントロールは、 図 4-25
のように複数の選択肢を提示し、そのうちの
どれかにチェックを入れるコントロールです。選択肢のうち、1 つのみを選択できます。この
64
65
Chapter 4 Silverlight アプリケーション開発 基本編
ComboBox コ ン ト ロ ー ル は、ListBox
4.4 コントロール
図 4-28 ComboBox コントロール
TabItem を 追 加 す る と き に は、 プ ロ パ
コントロールと同様に、いくつかの選択肢の
ティ ウィンドウの Items と書かれている部
中から選ぶことができるコントロールです。
分の右側にある
Items プロパティに選択肢のデータを設定
レクション エディター]ダイアログを表示し
します。ListBox コントロールと違うとこ
て、
[追加]ボタンをクリックします。
[追加]ボ
ろは見た目です。ListBox コントロールは、
タンをクリックした回数だけ TabItem が追
表示にある程度の高さが必要です。
加されます。
[コレクション エディター]ダイ
図 4-30 TabControl
ボタンをクリックし、
[コ
ComboBox コントロールは、クリックしたときだけ選択肢を表示しますので、設置するた
アログでは、TabItem のプロパティを変え
めの範囲が ListBox コントロールと比較して小さくなります。選択している項目が変わった
ることもできます。ダイアログの右側には、プロパティ ウィンドウと同じ内容が表示されます。
ときには、SelectionChanged イベントが発生します。
タブの部分に表示する文字列を変更するときは、Header プロパティを変えます。
値の選択
一定の範囲の中から 1 つの値を選択させ
日付選択
図 4-29 Slider コントロール
たいような場合には、Slider コントロー
ルを使用します。Slider コントロールは、
図 4-29 のようにトラックの部分と Thumb の
部分があり、Thumb を動かすことにより、
Thumb
トラック
日付の選択は、Calendar コントロール
図 4-31 Calendar コントロール
または DatePicker コントロールを使用し
ます。
Calendar コントロールは最初からカレ
ンダーが表示され、1 日または複数の日にち
値を決めます。値は Value プロパティに格
を選択できます。デフォルトでは月間カレン
納されます。値が変更されたときには、ValueChanged イベントが発生します。
ダーが表示されます。DisplayMode プロ
Minimum プロパティで最小値、Maximum プロパティで最大値を設定できます。Thumb の
パティを「Year」や「Decade」に変更す
動かし方には、直接マウスで動かす方法のほか、トラックの部分をクリックしたり、カーソル
ることにより、最初に表示するカレンダーの
キーを使う方法があります。トラックの部分をクリックしたときに増減する量は Large
形式を変えられます。日付の選択を 1 日で
Change プ ロ パ テ ィ に よ っ て 変 え ら れ、 カ ー ソ ル キ ー を 使 用 し た と き に 増 減 す る 値 は
は な く 複 数 の 日 に ち を 含 む 範 囲 に 変 更 す る 場 合 は、SelectionMode プ ロ パ テ ィ を
SmallChange プロパティによって変えられます。
図 4-32 DatePicker コントロール
「SingleRange」に変更します。選択した日は、1 日の場合は SelectedDate プロパティ、
Slider コントロールは、Orientation プロパティを「Vertical」に変更することに
複数の日にちの場合は SelectedDates プロパティによって取得できます。選択した日付を
より縦に表示したり、IsDirectionReversed プロパティを「True」に変更することに
変更したときは、SelectedDatesChanged イベントが発生します。
より値の増減の方向を変えることができます。
DatePicker コントロールは、図 4-32 のように Calendar コントロールと比較して、小
さい面積で表示できます。左側のテキスト フィールドに表示されている日付を、直接編集で
タブ インターフェイス
きます。右側にある「15」と書かれた部分をクリックすると、下側に Calendar コントロー
ルが表示され、カレンダーで日付を選択できます。選択した日にちは SelectedDate プロ
タブ形式のユーザー インターフェイスを作る場合には、TabControl コントロールを使用
パティに入ります。複数の日にちの選択はできないので、SelectedDates プロパティはあ
します。TabControl を使用すると、少ないスペースを有効に活用して、
情報を提供できます。
りません。選択した日付を変更した場合は、
SelectedDateChanged イベントが発生します。
TabControl は 1 つ ま た は 複 数 の TabItem に よ っ て 構 成 さ れ ま す。 図 4-30 は、3 つ の
Calendar コントロールのイベント名と少し違うので、注意してください。
TabItem で 構 成 さ れ て い る 例 で す。 複 数 の TabItem が あ っ た 場 合 で も、 表 示 で き る
TabItem は 1 つだけです。表示する TabItem は、上側にあるタブによって切り替えます。
66
67
Chapter 4 Silverlight アプリケーション開発 基本編
4.4 コントロール
進行状況の表示
進行状況を表示するときには、Progress
音声出力
図 4-33 ProgressBar コントロール
音を出力する際にも、MediaElement コントロールを使用できます。動画の音の部分のみ
Bar コントロールを使用します。Minimum
を使用する場合は、Visibility プロパティを「Collapsed」に変更し、動画を表示させ
プロパティに最小値、Maximum プロパティ
ないようにします。
に最大値を設定し、Value プロパティに現在の値を代入することにより、進行状況を図 4-33
のように表示します。
この例では、Minimum プロパティに「0」、Minimum プロパティに「100」が設定されて
いる状態で、Value プロパティに「70」を入れています。
Web サイトの表示
アプリケーションをブラウザー外で実行す
図 4-34 WebBrowser コントロール
るときにかぎり、外部の Web サイトを表示
画像表示
さ せ る こ と が で き ま す。 こ の と き に は、
WebBrowser コントロールを使用します。
ユーザー インターフェイスの一部として画像を使用するときには、Image コントロールを
Source プロパティに表示させたい URL を
使用します。MultiScaleImage コントロールを使用して画像を表示させることもできます。
指定します。
(⇒ p. 242)で説明する Deep Zoom
MultiScaleImage コントロールは、「6.3 Deep Zoom」
ブラウザー外実行については、「6.1 ブラ
で使用します。
ウザー外実行」(⇒ p. 182)で詳しく説明し
Image コントロールで画像を表示させるには、Source プロパティに絶対 URL を指定する
ます。
か、このアプリケーションである .xap ファイルがある位置を起点とした相対 URL を指定し
ます。画像の形式は、JPEG と PNG 形式をサポートしています。
動画表示
図形描画
動画をユーザー インターフェイスとして使用する場合には、MediaElement コントロー
円または楕円を描くときには Ellipse コ
ルを使用します。再生する動画は、Source プロパティに設定します。デフォルトでは、自
ントロール、長方形を描くときには Rectan
動的に動画を再生します。自動的に再生させないときは、AutoPlay プロパティを明示的に
gle コントロールを使用します。線を描く
「False」に変更します。コードで動画を再生させるときには Play メソッド、一時停止する
ときには Line コントロールを使用します。
ときには Pause メソッドを呼び出します。再生を止めて、最初から再生できるようにリセッ
Polygon コ ン ト ロ ー ル で 多 角 形、Poly
トするには Stop メソッドを呼び出します。音量を変えるには、Volume プロパティに値を
line コントロールでつながった数本の直
設定します。再生している位置を知るには、Position プロパティを使用します。
線、Path コントロールでつながった直線や
MediaElement でサポートしているメディアの形式については、MSDN ライブラリ* 4-3 を
曲線を描画できますが、Visual Studio でこ
参照してください。
れらのコントロールを使用するときには、
図 4-35 Ellipse,Rectangle,Lineコントロール
Ellipse
Rectangle
Line
XAML を直接書かなければなりません。
Ellipse コントロールと Rectangle コントロールは、ツールボックスからグラフィカ
ル デザイン ビューにドラッグ アンド ドロップすることによって描画できます。
4-3:MSDN ライブラリ:サポートされるメディア形式、プロトコル、およびログ フィールド
http://msdn.microsoft.com/ja-jp/library/cc189080(VS.95).aspx
68
Line コントロールは、デザイン ビュー上にドロップしても描画されません。Line コント
ロールの場合は、プロパティ ウィンドウで描画する線の始点と終点を指定する必要がありま
69
Chapter 4 Silverlight アプリケーション開発 基本編
4.5 コントロールのカスタマイズ 初級編
す。始点の X 座標は X1 プロパティ、Y 座標は Y1 プロパティに指定します。終点は、X2 プ
ロパティと Y2 プロパティに指定します。
4.5 コントロールのカスタマイズ 初級編
これらのコントロールは、線の太さや色を変えることもできます。線の太さは Stroke
Thickness プロパティ、色は Stroke プロパティで指定します。
Silverlight のグラフィックスはベクター グラフィックスを使用していますので、拡大しても
カスタマイズ初級編
見た目がきれいです。
ここでは、既存のコントロールの外観をカスタマイズする手法を解説します。再利用可能な
Line コントロール、Polygon コントロール、Polyline コントロール、Path コントロー
独自の機能を追加した新しいコントロールの作成については第 6 章で解説します。
ルは、デフォルトの状態ではツールボックス上に表示されていませんので、
使用するときはツー
ル ボ ッ ク ス 中 の コ ン ト ロ ー ル の 上 で 右 ク リ ッ ク し、
[ ア イ テ ム の 選 択 ]を ク リ ッ ク し て、
[Silverlight コンポーネント]タブにあるそれぞれのコントロールの欄にチェックを入れます。
プロパティ
既存のコントロールの外観をカスタマイズする最も基本的な方法は、
プロパティの変更です。
Visual Studio でも Expression Blend でも、サイズや位置はマウスを使って拡大 / 縮小 / 回転 /
枠
移動ができますし、そのほかのプロパティもプロパティ ウィンドウに変更可能なプロパティ
コントロールの周りに枠を付けたいときは、Border コントロールを使用します。Border
が表示されているので、変更したいプロパティに値を入力するだけです。
コントロールは、その中に 1 つだけコントロールを配置できます。Grid などのパネルも
Border コ ン ト ロ ー ル に 配 置 で き ま す の で、 複 数 の コ ン ト ロ ー ル を 使 用 し た い と き は、
リスト 4-14 ●プロパティによるコントロールのカスタマイズ
Border コントロールの中にパネルを貼り付け、そのパネル内にコントロールを配置します。
<Button Content=" ボタン " Name="button1"
Height="23" Width="75" Margin="87,103,0,0"
HorizontalAlignment="Left" VerticalAlignment="Top" />
枠の色は、BorderBrush プロパティで変更でき
ます。枠の太さは、BorderThickness プロパティ
で変更できます。CornerRadius プロパティを変
図 4-36 Border コントロール
更することにより、角を丸めることができます。
図 4-36 は、Border コ ン ト ロ ー ル の 中 に Text
Block コントロールを配置し、BorderThickness
を「10」
、CornerRadius を「10」に変更しています。
スクロール
狭い領域に多くの情報を入れたいときなどに、ScrollViewer コントロールを使用するこ
とでスクロール可能な領域を作成することができます。ScrollViewer コントロールは、そ
の中に 1 つだけコントロールを配置できます。長い文章を表示させるために ScrollViewer
コントロールと TextBlock コントロールを組み合わせるということもできますし、Grid
などのパネルを ScrollViewer コントロールの中に配置し、そのパネル内に複数のコント
ロールを貼り付けるという使い方もできます。
70
リソース
リソースは、Silverlight 要素の表示やアニメーションに必要な要素(ブラシ、スタイル、ア
ニメーション、テンプレートなど)を共有可能なリソースとしてあらかじめ宣言しておく仕組
みで、再利用を目的としたコントロールのカスタマイズには必須の機能です。後述のスタイル
をプロジェクト全体に適用する際も必須の機能です。ボタンの Foreground(文字の色)を
リソースで定義する例を紹介します。リソースとして定義することによって、UserControl
内のすべての要素でこの myBrush を利用できるようになります。
リスト 4-15 ●リソースを使ってボタンの文字の色を定義
<UserControl.Resources>
<SolidColorBrush x:Key="myBrush" Color="Red" />
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White" >
<Button Name="button1" Content=" ボタン "
Height="23" Margin="87,103,0,0"
Width="{Binding ElementName=slider1, Path=Value, Mode=OneWay}"
Foreground="{StaticResource myBrush}"
HorizontalAlignment="Left" VerticalAlignment="Top" />
71
Fly UP