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

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

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

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

Q&A

解決済

1回答

2280閲覧

カスタムレンダラーに引数を渡す方法を教えてください

kamingout

総合スコア44

Xamarin

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

0グッド

0クリップ

投稿2017/05/29 15:25

XamarinFormsにてカスタムレンダラーでBoxViewをオリジナルコントロールとして作成しています。
その中でMainPageクラスで扱っているintの変数値をBoxViewのカスタムレンダラーに渡したいのですが渡すことができず困っております。

MainPage上でBoxViewのカスタムレンダラーを宣言した後に、カスタムレンダラー上のDraw関数で扱うint型変数を
渡すにはどのような記述をすればよいでしょうか?

お手数おかけしますが、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは。

静的な値の渡し方も、動的な値の渡し方も以下がそのまま参考になるのではないでしょうか。
http://www.buildinsider.net/mobile/xamarintips/0034

投稿2017/05/29 16:00

Tak1wa

総合スコア4791

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

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

kamingout

2017/05/30 14:27

ありがとうございます!大変参考になりました。 上記ページを読み、私のしたい処理にはBindingPropertyの設定が必要だとわかり BoxViewのカスタムレンダラーのクラス内に以下のようにBindingPropertyを定義しました。 public static readonly BindableProperty ValueCountProperty = BindableProperty.Create("Value", typeof(int), typeof(CustomBoxView)); するとエラーが起きてしまったのですが、何が原因と考えられますでしょうか? ちなみに、xamlにてBoxViewカスタムレンダラーは既に定義しています。 上記サイトではC#でのBindingPropertyの定義方法しか記載されていなかったのですが、xaml内にBindingPropertyを設定することはできないのでしょうか? お手数おかけしますが、よろしくお願いいたします。
Tak1wa

2017/05/30 14:50

どういったエラーでしょうか。 また、なんだかカスタムレンダラーの認識が私とずれている気がしてます。 現状のプラットフォーム側のカスタムレンダラーと共通プロジェクト上のカスタムクラスを提示できますか。
kamingout

2017/05/31 09:34

以下が共通プロジェクト上のカスタムクラスになります。 public class CustomBoxView : BoxView { public static readonly BindableProperty ValueCountProperty = BindableProperty.Create("ValueCount", typeof(int), typeof(CustomBoxView)); public int ValueCount { get { return (int)GetValue(ValueCountProperty); } set { SetValue(ValueCountProperty, value); } } public CustomBoxView() { } }
kamingout

2017/05/31 09:38

以下がiOSでのカスタムレンダラーになります。 // CustomBoxViewのレンダラーをCustomBoxViewRendererに変更する宣言 [assembly: ExportRenderer(typeof(CustomBoxView), typeof(CustomBoxViewRenderer_iOS))] namespace UI.iOS { // BoxViewに対応したBoxRendererを継承したクラスをカスタムレンダラークラスとして作成 public class CustomBoxViewRenderer_iOS : VisualElementRenderer<CustomBoxView> { protected override void OnElementChanged(ElementChangedEventArgs<CustomBoxView> e) { base.OnElementChanged(e); } protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) { base.OnElementPropertyChanged(sender, e); if (e.PropertyName == "ValueCount") { SetNeedsDisplay(); // 再描画 } } // 表示数 public int ValueCount { get; set; } public override void Draw(CGRect rect) { // ここでxamarinForms側のコントロールを取得 var customBox = (CustomBoxView)Element; // ここでXamarin.Formsで設定したコントロールのプロパティ値を取得 using (var context = UIGraphics.GetCurrentContext()) { ValueCount = customBox.ValueCount; } // 以下でValueカウントを使用した描画処理
kamingout

2017/05/31 09:40

エラーについては、ビルドは通ったのですがdeployの際に共通プロジェクトの以下のコードで引っかかっていました。 BindableProperty.Create("ValueCount", typeof(int), typeof(CustomBoxView)); お手数おかけしますが、ご回答よろしくお願いいたします。
Tak1wa

2017/06/01 00:55

・teratailのヘルプを一度読んで頂き、コードはコメントではなくMarkdownを使用した上で、本文へ追記してください。 ・エラーは発生箇所ではなく、エラーメッセージなど詳細な情報を提示してください。
kamingout

2017/06/07 12:46

すみません、遅れましたが無事解決しました。 単純にBindable Propertyの初期値が定義してなかったためでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問