Xamarin.FormsでButtonのImageが真ん中からズレる問題

Xamarin.Formsで以下のXAMLを書くと、若干ですが画像が左にズレる問題があります。

<Grid>
<Button Image=”image.png” />
</Grid>

Imageだけの場合はちゃんと真ん中にくる。

<Grid>
<Image Source=”image.png” />
</Grid>

って言うのをTwitterに呟いてたらどこからともなくメンションが飛んできた。

なるほど、ButtonにはText要素があり、その分のスペースが画像の右側にあるようだ。

修正方法はツイートにもあるGithubにある通りで、AssemblyInfo.csに追記して、拡張ボタンを実装するってことらしい。

まず、AssemblyInfo.csがなかったのでAssemblyInfo.csを作る。

  • iOSプロジェクトを右クリック → 追加 → 新しいファイル
  • Misc → アセンブリ情報 → 新規

ってやるとPropertiesっていうフォルダとその中にAssemblyInfo.csが作成されるので開く。

以下を追記する

using Xamarin.Forms;
using [iOSプロジェクト名]

[assembly: ExportRenderer(typeof(Button), typeof(FixedButtonRenderer))]

iOSプロジェクトに新しいクラスファイルを追加して以下を記述

using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
using UIKit;

namespace [iOSプロジェクト名]
{
public class FixedButtonRenderer : ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
base.OnElementChanged(e);
Control.ImageEdgeInsets = new UIEdgeInses(0, 0, 0, 0);
}
}
}


ところで突然現れて解決(回避)方法を教えてくれた彼(?)は何者なのかと思っていたら

ヒ、ヒエ~!

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中