XamarinでClickできるLabelを作るには

画面上の任意の文字をクリックしたとき、イベント処理を行いたい場合、素の .NET C# では Label でも MouseClickイベント が指定できますが、Xamarin では Label Clickedイベント がありません。

そこでButton にしてしまうと以下のように背景がグレーになってしまいます。

これは boderWidth = 0 、backgroundColor=page背景色 で一見回避できます。

Button単体ではよいのですが、Grid に表形式に配置した場合、文字部分でけにしかタップに反応しないという問題が発生します。ユーザ側では「反応が悪い」と思われてしまいます。そこでそこでWidthRequst で幅を指定すると、、、

しかしHorizontalOptions =Start  を指定しても文字が中央寄せになってしまいます。文字位置は Panding reight 量を増やして調整します。しかし増やしすぎると文字が見えなくなるため、文字数から計算して reight 量を求める必要があります。確認して背景色の標準に戻して試してみます。

これでタップ可能な Label ができました。後は背景色を戻せばOK。フォント幅は可変長なので厳密にはズレが生じます。文字列描画幅の今日のところ算出まではおこなっていません。厳密に行う方法はあるようですが文字種をカウントして以下の式で「換算文字数」を計算して、フォント幅に掛けてあげると大体合いいます。 各乗数は逐次調整ください。

ユーザさんは「簡単だろ?」「出来て当たり前」と思われるかもしれませんが、様々なプログラミングのフラットフォームにて意図とおり仕様が実現できないことが2回に1回は発生します。特にGUI系は。市販本にもWEB記事にも載っていない。プログラミングにも表には見えない苦労がたくさんあります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です