2

我为 wrappanel 创建了一个自定义控件。但它显示了额外的空间。所以我正在尝试创建 HeightRequest 的 BindableProperty 进行控制并根据内容进行设置以删除额外的空间。

这就是我创建 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

我在这里做错了什么。请帮忙。

先感谢您。

4

2 回答 2

3

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

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

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

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

  3. 并使用, 和添加HeightText属性GetValueSetValue

    public double HeightText
    {
        get
        {
            return (double)GetValue(HeightTextProperty);
        }
        set
        {
            SetValue(HeightTextProperty, value);
        }
    }
    
于 2017-09-22T12:13:37.760 回答
0

请看下面的代码并尝试一下。希望,它会帮助你。

代码

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;
}
于 2017-09-22T04:15:33.217 回答