在 xamarin.forms 中为我的自定义控件自定义 HeightRequest 的 BindableProperty

custom BindableProperty of HeightRequest for my custom control in xamarin.forms

我为 wrappanel.but 创建了一个自定义控件,它显示额外的 space。 所以我正在尝试为控件创建 HeightRequest 的 BindableProperty 并根据内容设置它以删除额外的 space.

这就是我创建 HeightRequest 的 BindableProperty 的方式

    public double HeightRequest { get; set; }

    private static BindableProperty heightTextProperty = BindableProperty.Create(
                                                     propertyName: "HeightRequest",
                                                     returnType: typeof(double),
                                                     declaringType: typeof(InstallationPhotoWrappanel),
                                                     defaultValue: 100,
                                                     defaultBindingMode: BindingMode.TwoWay,
                                                     propertyChanged: heightTextPropertyChanged);

    private static void heightTextPropertyChanged(BindableObject bindable, object oldValue, object newValue)
    {
        var control = (InstallationPhotoWrappanel)bindable;
        control.HeightRequest = Convert.ToDouble(newValue);
    }

但它给了我例外

exception has been thrown by the target of an invocation

我做错了什么here.please求助。

提前致谢。

请看下面的代码并尝试一下。希望对你有帮助。

代码

public static readonly BindableProperty HeightRequestProperty =
    BindableProperty.Create<InstallationPhotoWrappanel,double>(i=>i.HeightRequest,100,BindingMode.TwoWay,heightTextPropertyChanged);

public double HeightRequest
{
    get
    {
        return (double)GetValue(HeightRequestProperty);
    }
    set
    {
        SetValue(HeightRequestProperty, value);
    }
}

static bool heightTextPropertyChanged(BindableObject bindable, double value)
{
    var control = (InstallationPhotoWrappanel)bindable;
    control.HeightRequest = value;
    return true;
}

您的自定义控件应该已经有一个 HeightRequest 属性。我假设您正在创建名称为 HeightText 的自定义可绑定 属性。

如果是这样,我可以在代码中看到三个问题:

  1. propertyName: "HeightRequest" 应该是 propertyName: "HeightText"

  2. 为确保我们不会获得目标 属性 类型不匹配异常,请将 defaultValue: 100 更改为 defaultValue: (double)100

  3. 并使用GetValueSetValue

    添加HeightText属性
    public double HeightText
    {
        get
        {
            return (double)GetValue(HeightTextProperty);
        }
        set
        {
            SetValue(HeightTextProperty, value);
        }
    }