Ich füge eine Ressource über XAML in meine App.xaml. Diese Ressource ist ein impliziter Stil, der einem CustomControl zugewiesen wird. Das CustomControl enthält eine Beschriftung.Xamarin Forms BindableProperty Vor dem Konstruktor geändert
Um die TextColor dieses Labels festzulegen, erstelle ich eine bindbare Eigenschaft für das CustomControl und weise einen Wert mit dem impliziten Stil zu. Mit der PropertyChanged-Methode der BindableProperty setze ich die TextColor der Beschriftung in meinem CustomControl.
<Style TargetType="CustomControl" >
<Setter Property="InnerLabelTextColor" Value="Green" />
</Style>
-
private static void InnerLabelTextColorChanged(BindableObject bindableObject, object oldValue, object newValue)
{
((CustomControl)bindableObject).InnerLabel.TextColor = (Color)newValue;
}
Diese verwendet in XF 2.3.2.127 zu arbeiten, aber wenn ich zu XF aktualisiert 2.3.4.270 Ich begann eine Nullreferenceexception in der Custom bekommen - BindableProperty - InnerLabelTextColorChanged Methode.
Die PropertyChanged-Methode wird aufgerufen, bevor der Konstruktor ausgeführt wird. Mein InnerLabel ist null, wenn die PropertyChanged-Methode ausgeführt wird, die die NullReferenceException verursacht.
Ich frage mich, ob dieses Verhalten das angeforderte XF-Verhalten ist oder ob es ein Fehler ist?
Wenn es das angeforderte Verhalten ist, kann jemand den richtigen Weg zur Bewältigung dieser Situation bieten?
Danke!
Bearbeiten - individuelle Steuercodebeispiel
public sealed class CustomControl : ContentView
{
public static readonly BindableProperty InnerLabelTextColorProperty =
BindableProperty.Create("InnerLabelTextColor", typeof(Color), typeof(CustomControl), Color.Black,
BindingMode.OneWay, null, CustomControl.InnerLabelTextColorChanged, null, null, null);
public CustomControl()
{
this.InnerLabel = new Label();
this.Content = this.InnerLabel;
}
public Label InnerLabel { get; set; }
public Color InnerLabelTextColor
{
get
{
return (Color)this.GetValue(CustomControl.InnerLabelTextColorProperty);
}
set
{
this.SetValue(CustomControl.InnerLabelTextColorProperty, value);
}
}
private static void InnerLabelTextColorChanged(BindableObject bindableObject, object oldValue, object newValue)
{
((CustomControl)bindableObject).InnerLabel.TextColor = (Color)newValue;
}
}
Ihren Steuercode benutzerdefinierte Put –
@ZiyadGodil. Ich habe der Frage ein Codebeispiel hinzugefügt. –