fc2ブログ

記事一覧

Xamarin.forms で iOS用のチェックボックスを作成する。 | Xamarin.forms


Xamarin.forms で iOS 用のチェックボックスが無いので、自作してみました。
ListViewでバインドもできます。
Androidでも動作します。

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


話は脱線しましたが、実行イメージは以下の通りです。

xamarin_ios_checkbox.png


参考サイトは以下になります。
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用チェックあり  →f:id:junjun5555:20161001012843p:image
Android用チェックあり→f:id:junjun5555:20161001012842p:image(白色なので見えないと思います。)
iOS用チェックなし  →f:id:junjun5555:20161001012841p:image
Android用チェックなし→f:id:junjun5555:20161001012840p:image(白色なので見えないと思います。)



当ブログの内容をまとめた Xamarin逆引きメニュー は以下のURLからご覧になれます。
http://itblog.dynaspo.com/blog-entry-81.html


関連記事

コメント

コメントの投稿

※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。

 入力されていないコメントには返信しませんのであらかじめご了承くださいませ。

※ニックネームでも良いので必ずご入力ください。

    

※必ずご入力ください。

    
    

※必ずご入力ください。

※技術的な質問には環境やエラーについて正確かつ詳細にお教えください。

・正確なエラーの内容

・Windowsのバージョン番号

・Visual Studioのバージョン

・機器の型番

・アプリやソフトのバージョン

    

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Catalina 10.15 / Mojave 10.14 / High Sierra 10.13 / Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
【データベース】
Oracle 10g/9i
SQLServer 2016/2008R2/2005/2000
SQLAnywhere 16/11/8
【BI/レポートツール】
Cognos ReportNet (IBM)
Microsoft PowerBI
ActiveReport (GrapeCity)
CrystalReport
【OCX関連】
GrapeCity InputMan SPREAD MultiRow GridView
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS jQuery IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。