Xamarin.forms で iOS用のチェックボックスを作成する。 | Xamarin.forms
- 2016/09/30
- 01:30
Xamarin.forms で iOS 用のチェックボックスが無いので、自作してみました。
ListViewでバインドもできます。
Androidでも動作します。
ちなみにXLabsにCheckBoxのコントロールがありますが、因果関係ありすぎて、コンパイルすら通らない。。。てか多すぎ!!
他に、XuniというグレープシティのNuGetパッケージがありますが、iOSで表示されません。
さらにはグレープシティですからね。VB開発者なら誰しも1度はブラックボックスに足を取られているはず。
できれば使いたくないですよね~。多階層が表示できるとかいってSpread使いましたが、1万行になるとめちゃくちゃ遅く、入力モードにより親階層のデータが子階層にコピーされてしまう不具合もあり(公式ページに不具合情報で載りました)、最悪です。
てか有料ツールなんだから、不具合でわかりませんは会社として無いと思うんですが。。。
話は脱線しましたが、実行イメージは以下の通りです。

参考サイトは以下になります。
http://stackoverflow.com/questions/30772510/how-to-add-checkbox-in-xamarin-forms-in-xaml-file
PCLにて
public class BaseCheckBox : Button { public BaseCheckBox() { if (Device.OS == TargetPlatform.iOS) base.Image = "unchecked_bk.png"; else { base.Image = "unchecked_wt.png"; } base.Clicked += new EventHandler(OnClicked); base.SizeChanged += new EventHandler(OnSizeChanged); base.BackgroundColor = Color.Transparent; base.BorderWidth = 0; } private void OnSizeChanged(object sender, EventArgs e) { } public static BindableProperty IsCheckedProperty = BindableProperty.Create( propertyName: "IsChecked", returnType: typeof(bool), declaringType: typeof(BaseCheckBox), defaultValue: false, defaultBindingMode: BindingMode.TwoWay, propertyChanged: CheckedValueChanged); public bool IsChecked { get { return (bool)GetValue(IsCheckedProperty); } set { SetValue(IsCheckedProperty, value); OnPropertyChanged(); RaiseCheckedChanged(); } } private static void CheckedValueChanged(BindableObject bindable, object oldValue, object newValue) { if ((bool)newValue == true) { if (Device.OS == TargetPlatform.iOS) { ((BaseCheckBox)bindable).Image = "checked_bk.png"; } else { ((BaseCheckBox)bindable).Image = "checked_wt.png"; } } else { if (Device.OS == TargetPlatform.iOS) { ((BaseCheckBox)bindable).Image = "unchecked_bk.png"; } else { ((BaseCheckBox)bindable).Image = "unchecked_wt.png"; } } } public event EventHandler CheckedChanged; private void RaiseCheckedChanged() { if (CheckedChanged != null) CheckedChanged(this, EventArgs.Empty); } private bool _IsEnabled = true; public virtual new bool IsEnabled { get { return _IsEnabled; } set { _IsEnabled = value; OnPropertyChanged(); if (value == true) { this.Opacity = 1; } else { this.Opacity = 0.5d; } base.IsEnabled = value; } } public void OnEnabled_Changed() { } public void OnClicked(object sender, EventArgs e) { IsChecked = !IsChecked; } }
表示するアイコンは以下の通りです。
PCLのResourcesフォルダに埋め込みリソースとして保存してください。
iOS用チェックあり →

Android用チェックあり→

iOS用チェックなし →

Android用チェックなし→

当ブログの内容をまとめた Xamarin逆引きメニュー は以下のURLからご覧になれます。
http://itblogdsi.blog.fc2.com/blog-entry-81.html
- 関連記事
-
- Xamarin.iOS で画像に独自フォントで文字列を描画する | Xamarin.forms
- The operation couldn’t be completed. (Cocoa error 4.) のエラーが発生する | Xamarin.forms
- Xamarin.forms で iOS用のチェックボックスを作成する。 | Xamarin.forms
- Foundation.MonoTouchException | Xamarin.iOS
- Xamarin.iOS initialization failed. | Xamarin.forms
The operation couldn’t be completed. (Cocoa error 4.) のエラーが発生する | Xamarin.forms ホーム
Foundation.MonoTouchException | Xamarin.iOS