OnElementPropertyChangedがBoxViewのようなVisualElementで起動されたとき、その時に基底のプラットフォームビューのプロパティは更新されていないことに気付きました。ビューのレンダリングが完了したら、どうすればわかりますか?
は私がVisualElementの対応プラットフォームビューがレンダリング終了したときに、何かを知りたい:Xamarin.Forms、すなわちVisualElementRenderer.csの内部にいくつかのコードを探し
this.someBoxView.ViewHasRendered += (sender, e) => { // Here I would know underlying UIView (in iOS) has finished rendering };
を、そのIを思わOnPropertyChangedが終了した後でイベントを発生させる可能性があります。ような何か:
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();
}
は、当然のことながら、いくつかのより多くの複雑さは、それがサブクラス化する必要があるであろうと、VisualElementクラスにイベントを追加することにあります。しかし、私はあなたが私が何をしているかを見ることができると思います。
私は、IsInNativeLayoutのようなVisualElementのプロパティに注目しました。しかし、それはWin/WP8で実装されているようです。また、VisualElementRendererのUpdateNativeWidgetについても、私はそれらを活用する適切な方法を理解できません。
アイデア? 非常に高く評価されています。
- 「クリック」するのに1分かかりましたが、クリックしました。私はあなたのアドバイスを取って、このアプローチから速くて頑張ってしまいました。 –