質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

6065閲覧

Xamarin.Formsで複数のImageを使ってラジオボタンのような機能を作りたい

ze_ze_ze

総合スコア14

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

1クリップ

投稿2016/11/25 07:24

編集2016/11/25 07:28

###前提・実現したいこと
複数のImageを配置しタップしたら選択され、他のImageがタップされたら最初にタップされたImageは選択が解除され、新しくタップされたものが選択されるというImageでラジオボタンのような機能を作りたいです。
やり方が分かる方教えてください。
よろしくお願いします。

###試したこと
選択されたことが視覚的に確認できる方法としてタップされたら画像を変更するという方法を考え実行しましたが変更した画像を戻す方法が分かりませんでした。
タップ処理
別の効率よいやり方があればこの方法は無視していただいて構いません。
###補足情報(言語/FW/ツール等のバージョンなど)

開発環境
Visual Studio 2015
Windows 10
Xamarin.Forms.Portable

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんな感じでしょうか。

イメージ説明

それぞれの Image がタップされた時に、全ての画像を自力で更新すればよいのですが、
せっかく Xamarin.Forms なので、データバインディングとプロパティ変更通知を利用するのが後々にとってよいでしょう。

おおざっぱにやる事は5つ。

  1. 選択しているボタンの Index を保持するモデルクラスを作り、それは INotifyPropertyChanged を実装する。
  2. Index から ImageSource へ変換する ValueConverter を作る。これはモデルの Index と、後述のコマンドパラメータ値が一致したら選択中の画像を、不一致なら未選択の画像を返すものである。
  3. 画面の XAML の BindingContext に 1. のモデルのインスタンスを設定する。
  4. 並べた ImageSource プロパティに 1. の Index をバインドし、さらに 2. の ValueConverter を仕掛ける。コマンドパラメータには 1〜 の連番を指定する。
  5. 各 Image がタップされたときの処理で、モデルクラスの Index に 1〜 を設定する。

サンプルを以下に作ってみましたので参考にしてみてください。

投稿2016/11/25 18:10

編集2016/11/26 16:42
amay077

総合スコア1075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ze_ze_ze

2016/11/28 03:09

回答ありがとうございます。 わざわざサンプルまでありがとうございます。 返信遅れて申し訳ございません。 2点質問なんですが ①サンプルアプリがandroidでデバッグすると配置スキップされます。何が原因だと考えられますか? ②サンプルアプリではContentPageで全て作ってありますが、私はGridに均等に配置したImageを使ってやりたいのですが下の部分の変え方がわかりません。(Grid.Resourcesというものは無いと思うので。。。) <ContentPage> <ContentPage.Resources> <ResourceDictionary> <cv:IndexToImageConverter x:Key="imgConv" /> </ResourceDictionary> </ContentPage.Resources> </ContentPage> もしやり方分かるようでしたら教えてください。 よろしくお願いします。
ze_ze_ze

2016/11/28 04:27

①は解決しました。 構成マネージャーの配置のチェックが外れてただけでした。
ze_ze_ze

2016/11/28 05:28

迅速な回答ありがとうございます。 実は作ったものをApplicationに読み込むときにScrollViewのChildrenに設置していたため大枠をGridにしていましたがContentPageでもその中に配置できますか? 何度も質問申し訳ございません。 new RadioImageSamplePage { HorizontalOptions = LayoutOptions.FillAndExpand, BackgroundColor = Color.FromHex("FFFF00"), }, 今まではこのように配置していましたがContentPageだとエラーがでました。
ze_ze_ze

2016/11/28 06:06

後すいません。 もう一つだけ質問で今一つのimageでラジオボタンのようにしていますが、三つともimageを変えたい場合はどうすればよいでしょうか? 色々いじってみましたがどこをいじったらよいか分かりませんでした。 質問ばかりで申し訳ございません。 よろしくお願いいたします。
amay077

2016/11/28 06:09

どの画像を使うかは IndexToImageConverter で制御しているので、3つそれぞれ ON/OFF で異なる画像を使うなら、 IndexToImageConverter1, IndexToImageConverter2, IndexToImageConverter3 を作って、それぞれの on/off 画像のところを別々にします。 で、Image1 に IndexToImageConverter1 を、 Image2 に IndexToImageConverter2 を設定する、という感じでしょうね。
ze_ze_ze

2016/11/28 06:33

ありがとうございました。 無事やりたいことが出来ました。 何度も何度も本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問