菜鸟教程小白 发表于 2022-12-13 06:04:01

ios - Xamarin Forms 自定义渲染器 ios


                                            <p><p>我正在尝试创建自定义控件。
下面是我的代码</p>

<pre><code>public class BoxControlRenderer:ViewRenderer&lt;BoxControl,BoxControlView&gt;
    {
      BoxControlView boxControlView;

      protected override void OnElementChanged (ElementChangedEventArgs&lt;BoxControlView&gt; e)
      {
            base.OnElementChanged (e);
            this.lineControlView = new BoxControlView (this.Bounds);
            this.SetNativeControl(this.boxControlView);
      }


      protected override void OnElementPropertyChanged (object sender, System.ComponentModel.PropertyChangedEventArgs e)
      {
            base.OnElementPropertyChanged (sender, e);

            if (e.PropertyName == BoxControlView.BoxControlProperty.PropertyName)
            {
                this.boxControlView.BoxControlProperty = this.Element.CheckedValue;
            }
      }

    }
</code></pre>

<p>我的 BoxControlViewView :</p>

<pre><code>
    public class BoxControlView :UIView
    {
      UIImageView imageView;

      BoxControl _control;

      
      public BoxControlView(CGRect bounds)
            : base(bounds)
      {
            imageView = new UIImageView (new CGRect (0, 0, 40, 18));
      }

      private bool _boxControlProperty;

      public bool BoxControlProperty
      {
            get {
                return _boxControlProperty;
                }
            set{
                value = _boxControlProperty;
                OnPropertyChanged (&#34;BoxControlProperty&#34;);
                SetNeedsDisplay ();

            }
      }

      public event PropertyChangedEventHandler PropertyChanged;

      protected virtual void OnPropertyChanged( string propertyName = null)
      {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
                handler (this, new PropertyChangedEventArgs (propertyName));
      }

      public override void Draw (CoreGraphics.CGRect rect)
      {
            base.Draw (rect);

            this.BackgroundColor = UIColor.Green;

            BoxControlProperty = _control.CheckedValue;

            Action OnImageViewTapped = () =&gt; {
                if(BoxControlProperty)
                  imageView.Image = UIImage.FromFile(&#34;test1.png&#34;);
                else
                  imageView.Image = UIImage.FromFile(&#34;test2.png&#34;);
            };

            var tapGesture = new UIGestureRecognizer ();
            tapGesture.AddTarget (OnImageViewTapped);
            imageView.AddGestureRecognizer (tapGesture);
      }
    }
</code></pre>

<p>BoxControl:</p>

<pre><code>public class BoxControl :View
    {

      public static readonly BindableProperty BoxControlProperty = BindableProperty.Create&lt;BoxControl, bool&gt;(z=&gt;z.CheckedValue,false);

      public bool CheckedValue
      {
            get{
                return (bool)GetValue (BoxControlProperty);
            }
            set{
                SetValue (BoxControlProperty, value);
            }
      }

    }
</code></pre>

<p>在上面的代码中,onDraw 方法没有被调用。
如果我们在 </p> 中保留任何断点,则在调试 Xamarin Studio 时会崩溃

<pre><code>protected override void OnElementChanged (ElementChangedEventArgs&lt;CheckBoxControl&gt; e) method or Draw method.
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>渲染器文件顶部是否有 DependencyService 导出行?</p>

<p>类似于:</p>

<pre><code>
</code></pre>

<p>我没有看到它,所以我不得不问。再说一次,我还没有使用最新版本的 Xamarin.Forms (1.3)。这就是我为示例项目定制渲染器的方式:<a href="http://www.joesauve.com/using-xamarin-auth-with-xamarin-forms/" rel="noreferrer noopener nofollow">http://www.joesauve.com/using-xamarin-auth-with-xamarin-forms/</a> .在页面下方约 1/3 处查找 iOS 部分。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - Xamarin Forms 自定义渲染器 ios,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/29172388/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/29172388/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - Xamarin Forms 自定义渲染器 ios