绑定属性默认值无法正常工作



我正在设置一个自定义控件,但我遇到了一个奇怪的问题,即我的 BindableProperty 字段中有一个(而且只有一个(未使用默认值。 它是浮点类型,单步执行调试器时,其值始终为 0。

在这里,我创建属性和字段。

public static readonly BindableProperty StrokeProperty = BindableProperty.Create(
nameof(Stroke),
typeof(float),
typeof(ChartControl),
1F,
BindingMode.TwoWay,
propertyChanged: RedrawAxisView);
public static readonly BindableProperty FontSizeProperty = BindableProperty.Create(
nameof(FontSize),
typeof(float),
typeof(ChartControl),
12F,
BindingMode.TwoWay,
propertyChanged: RedrawAxisView);
public float Stroke
{
get => (float)this.GetValue(StrokeProperty);
set => this.SetValue(StrokeProperty, value);
}
public float FontSize
{
get => (float)this.GetValue(FontSizeProperty);
set => this.SetValue(FontSizeProperty, value);
}

我正在使用以下内容在 XAML 中实现这一点:

<xf:ChartControl x:Name="pChart">
<xf:ChartControl.Stroke>
<OnPlatform x:TypeArguments="x:Single" Android="3"/>
</xf:ChartControl.Stroke>
<xf:ChartControl.FontSize>
<OnPlatform x:TypeArguments="x:Single" Android="36"/>
</xf:ChartControl.FontSize>
</xf:ChartControl>

我后来使用这两个来创建 SkiaSharp 油漆,但我设置了一个断点,我可以看到 FontSize 在 UWP 上默认为 0,而它应该默认为 12。 另一方面,描边默认为 1,完全符合预期。 如果我执行以下操作,它确实有效,但这并不理想,因为我宁愿不为 UWP 设置"在平台上",我希望它使用默认值。

<xf:ChartControl.FontSize>
<OnPlatform x:TypeArguments="x:Single">
<On Platform="UWP">12</On>
<On Platform="Android">36</On>
</OnPlatform>
</xf:ChartControl.FontSize>

谁能帮助我理解为什么我没有获得 FontSize 的默认值?

更新:如果需要,这是 PropertyChanged 事件。

private static void RedrawAxisView(BindableObject bindable, object oldvalue, object newvalue)
{
var bindableCanvas = bindable as ChartControl;
bindableCanvas?.axisView.InvalidateSurface();  //SkiaSharp
}

根据您的描述,您想使用BindableProperty创建自定义控件,您说您没有只有一个正确的默认值,请检查BindableProperty通知属性是否首先更改。

我看到属性更改事件是重绘轴视图,所以我想它在此事件中可能存在一些问题。

propertyChanging: (bindable, oldValue, newValue) =>
{
var control = bindable as ChartControl;
var changingFrom = oldValue as float;
var changingTo = newValue as float;
//do something with ChartControl
//o is the old value of the property
//n is the new value
});

下面是有关使用 BindableProperty 创建自定义控件的示例,可以查看:

https://mindofai.github.io/Creating-Custom-Controls-with-Bindable-Properties-in-Xamarin.Forms/

最新更新