我制作了一个自定义控件,该控件具有属性X
-隐藏了父项的VisualElement.X
属性。
public class MyCustomControl : ContentView // is a distant child of VisualElement
{
public new double X
{
get { return 0; }
set { Console.WriteLine("I was not called with: " + value); }
}
}
我在xaml中设置了自定义控件的X
:
<controls:MyCustomControl X="10" />
但是这里调用Xamarin.Forms.VisualElement.X
属性设置器而不是MyCustomControl.X
属性设置器。为什么?以及如何使它代替我的自定义控件属性?
作为旁注。当x:Name="myCustomControl
和myCustomControl.X = 10
在后面的代码中时-MyCustomControl
的setter被调用。
当声明父项中不存在的属性时:
public double AnotherX
{
get { return 0; }
set { Console.WriteLine("Was called with: " + value); }
}
设置器被调用。 (来自xaml)。
答案 0 :(得分:3)
这是因为要通过Xaml设置VisualElement的BindableProperty'X'。 如果您还可以在自定义控件中创建BindableProperty'X',它也可以正常工作。
答案 1 :(得分:1)
您可以创建一个可绑定属性,而不仅仅是一个属性,请参阅下文,了解如何制作可绑定属性
private readonly BindableProperty CustomXProperty = BindableProperty.Create(nameof(CustomX), typeof(double), typeof(MyCustomControl), defaultValue: 0.0);
public double CustomX
{
get
{
return (double)GetValue(CustomXProperty);
}
set
{
SetValue(CustomXProperty, value);
}
}
更多信息,请参见此处https://docs.microsoft.com/en-us/xamarin/xamarin-forms/xaml/bindable-properties