Windows Phoneにコントロールや機能を追加するツールとしてSilverlight for Windows Phone Toolkitがあります。
ともすれば、どのような機能があったのか忘れがちなので、ちょっとずつ備忘録代わりに書き綴っていく。 第一回はToggleSwitch。
上の画像のようにオン・オフを表現することができる。
2つのステートを持つ点ではチェックボックスと近しい機能のコントロールだが、 スライドして変更するあたりはよりメトロ的というかスマフォ的。
ToggleSwitchを利用するには当然だがSilverlight for Windows Phone Toolkitがインストールされていることが前提となる。
コントロールとして追加したいXAMLコードの頭に以下を追加する
xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
XAMLにコントロールを追加するコードは以下、
<toolkit:ToggleSwitch x:Name="toggle"
Content="Sample1"
IsChecked="True"
Header="Header1"
/>
続いてトグルスイッチのオンオフを切り替えたときのイベントを設定する方法について。
スイッチのオンオフのイベント名はそれぞれCheckedとUncheckedです。
<toolkit:ToggleSwitch x:Name="toggleSwitch"
Content="Sample1"
IsChecked="True"
Header="Header1"
Unchecked="toggleSwitch_Unchecked"
Checked="toggleSwitch_Checked"
/>
合わせてコードビハインドにハンドラーを記述。
/// <summary>
/// トグルスイッチをオフにした際のイベントハンドラー
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toggleSwitch_Unchecked(object sender, RoutedEventArgs e)
{
Debug.WriteLine("トグルスイッチオフ!!");
this.toggleSwitch.Foreground = new SolidColorBrush(Colors.Red);
}
/// <summary>
/// トグルスイッチをオンにした際のイベントハンドラー
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toggleSwitch_Checked(object sender, RoutedEventArgs e)
{
Debug.WriteLine("トグルスイッチオン!!");
this.toggleSwitch.Foreground = new SolidColorBrush(Colors.Blue);
}
IsChecked
ToggleSwitchが選択されているかどうか。
true、false、nullを値に持つ。
Header
ヘッダー部分、メッセージやその他コントロールを入れることもできる。
Content
コンテンツ部分、メッセージやその他コントロールを入れることもできる。
CheckedとUnchecked
スイッチがオン、オフになったときに呼び出されるイベントハンラー。 コードは上記参照。
Indeterminate=”不定”な状態で呼び出されるようだが、GUI上から操作してもオン、オフにしかならない。
プログラム上で無理やり発生させてみる。
/// <summary>
/// IsCheckedにnullを代入してIndeterminateイベントを起こすボタンイベントハンドラー
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, RoutedEventArgs e)
{
this.toggleSwitch.IsChecked = null;
}
ToggleSwitchコントロールのIsCheckedプロパティなどはnull許容型なのでboolean型に代入できない。
そういう場合
bool value = toggleSwitch.IsChecked ?? false;
と書くと、nullの場合falseが入る。
(下部に見た目を弄ったToggleSwitchも置いておきました。参考にどうぞ)
Please give us your valuable comment