J'ai remarqué que lorsque OnElementPropertyChanged est déclenché sur un VisualElement comme un BoxView, les propriétés de la vue de la plateforme sous-jacente ne sont pas mises à jour à ce moment-là.Comment puis-je savoir quand une vue est terminée?
Je veux savoir quand la vue de la plate-forme correspondante de VisualElement est terminée rendu, quelque chose comme:
this.someBoxView.ViewHasRendered += (sender, e) => { // Here I would know underlying UIView (in iOS) has finished rendering };
En regardant à travers un code intérieur de Xamarin.Forms, à savoir VisualElementRenderer.cs, il semblerait que je pourrait déclencher un événement après la fin de OnPropertyChanged. Quelque chose comme:
protected virtual void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == VisualElement.BackgroundColorProperty.PropertyName)
SetBackgroundColor(Element.BackgroundColor);
else if (e.PropertyName == Layout.IsClippedToBoundsProperty.PropertyName)
UpdateClipToBounds();
else if (e.PropertyName == PlatformConfiguration.iOSSpecific.VisualElement.BlurEffectProperty.PropertyName)
SetBlur((BlurEffectStyle)Element.GetValue(PlatformConfiguration.iOSSpecific.VisualElement.BlurEffectProperty));
// Raise event
VisualElement visualElement = sender as VisualElement;
visualElement.ViewHasRendered();
}
Naturellement il y a un peu plus de complexité à l'ajout d'un événement à la classe VisualElement, car il aurait besoin d'être sous-classé. Mais je pense que vous pouvez voir ce que je veux.
En piquant, j'ai remarqué des propriétés sur VisualElement comme IsInNativeLayout. Mais cela ne semble être implémenté dans Win/WP8. En outre, UpdateNativeWidget sur VisualElementRenderer également, mais je ne peux pas trouver la bonne façon de les exploiter.
Des idées? Très apprécié.
- Il m'a fallu une minute pour "cliquer", mais cliquez dessus! J'ai fini par prendre vos conseils et courir vite et fort loin de cette approche. –