AppThemeBinding für die FontImageSource-Eigenschaft für benutzerdefinierte Steuerung
Posted: 07 Jan 2025, 04:06
Ich entwickle derzeit eine benutzerdefinierte Auswahl mit der Möglichkeit, ein Symbol hinzuzufügen.
Das benutzerdefinierte Steuerelement besteht aus:
Es tritt ein Problem mit der Source-Eigenschaft des Typs ImageSource auf. Wenn beispielsweise eine FontImageSource als Objekt verwendet wird und AppThemeBinding auf „Color“ festgelegt ist, erfolgt die Aktualisierung nicht, wenn das Design geändert wird. Die MapSource-Methode wird nicht aufgerufen, da OnPropertyChanged nicht von der Source-Eigenschaft aufgerufen wird.
Ich habe versucht, das PropertyChanged-Ereignis wie folgt an das übergeordnete Element weiterzugeben, ohne Erfolg:
Mein zweiter Versuch bestand darin, mich bei Application.Current.RequestedThemeChanged zu registrieren und OnPropertyChanged für das Quellobjekt auszulösen, falls sich die Color-Eigenschaft ändert. Beim Debuggen blieb die festgelegte Color-Eigenschaft auch nach einer Designänderung und AppThemeBinding gleich.
Im folgenden Code funktioniert AppThemeBinding wie es sollte, sodass AppThemeBinding auf FontImageSource ausgelöst werden kann UI-Änderung:
Der Code und ein Beispielprojekt sind unter diesem Link verfügbar: github
Schritte zum Reproduzieren:
Aktualisieren Sie IconPickerPage und legen Sie FontImageSource wie folgt fest:
Starten Sie die App, gehen Sie zu IconPicker und wechseln Sie den Dunkel-/Hellmodus. Das Symbol wird nicht neu gezeichnet.
Das benutzerdefinierte Steuerelement besteht aus:
- Vererbung des benutzerdefinierten Steuerelements von der Picker-Klasse.
- Benutzerdefinierter Handler, der von der PickerHandler-Klasse erbt.
Es tritt ein Problem mit der Source-Eigenschaft des Typs ImageSource auf. Wenn beispielsweise eine FontImageSource als Objekt verwendet wird und AppThemeBinding auf „Color“ festgelegt ist, erfolgt die Aktualisierung nicht, wenn das Design geändert wird. Die MapSource-Methode wird nicht aufgerufen, da OnPropertyChanged nicht von der Source-Eigenschaft aufgerufen wird.
Ich habe versucht, das PropertyChanged-Ereignis wie folgt an das übergeordnete Element weiterzugeben, ohne Erfolg:
Code: Select all
public static readonly BindableProperty SourceProperty = BindableProperty.Create(nameof(Source), typeof(ImageSource), typeof(IconPicker), defaultValue: default(ImageSource));
public ImageSource Source
{
get => (ImageSource)GetValue(SourceProperty);
set
{
value.PropertyChanged += (s, e) => OnPropertyChanged(nameof(Source));
SetValue(SourceProperty, value);
}
}
Im folgenden Code funktioniert AppThemeBinding wie es sollte, sodass AppThemeBinding auf FontImageSource ausgelöst werden kann UI-Änderung:
Code: Select all
Schritte zum Reproduzieren:
Aktualisieren Sie IconPickerPage und legen Sie FontImageSource wie folgt fest:
Code: Select all