Я считаю, что мне трудно получить приложение PlatformEffect. Похоже, что он разрешается, но не присоединяется. Вот PlatformEffect в библиотеке проекта IOS имени EffectTestLib.iOS
:ПлатформаEffect не прилагается?
using System;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly: ResolutionGroupName ("MyCompany")]
[assembly: ExportEffect (typeof (EffectTestLib.iOS.MyEffect), "MyEffect")]
namespace EffectTestLib.iOS {
public class MyEffect : PlatformEffect {
protected override void OnAttached() {
System.Diagnostics.Debug.WriteLine ("Effect Attached");
throw new NotImplementedException();
}
protected override void OnDetached() {
throw new NotImplementedException();
}
protected override void OnElementPropertyChanged (System.ComponentModel.PropertyChangedEventArgs args) {
base.OnElementPropertyChanged (args);
}
}
}
Так что, если он присоединяется, он должен вывести «Эффект Attached» и бросить NotImplementedException
.
Вот код PCL для приложения, использующего этот PlatformEffect:
using Xamarin.Forms;
namespace EffectTest {
public class App : Application {
public App() {
MainPage = new ContentPage {
Content = new StackLayout {
VerticalOptions = LayoutOptions.Center,
Children = {
new Label {
XAlign = TextAlignment.Center,
Text = "Welcome to Xamarin Forms!"
}
}
}
};
var effect = Effect.Resolve ("MyCompany.MyEffect");
System.Diagnostics.Debug.WriteLine ("effect=[{0}]",effect);
MainPage.Effects.Add(effect);
}
}
}
Примечание Я пишу PlatformEffect к выходу приложения для проверки его будет решено. Если это не решится, я должен увидеть effect=[Xamarin.Forms.NullEffect]
.
Ниже перечислены прикладные программы для платформы iOS: с использованием системы; с использованием System.Collections.Generic; с использованием System.Linq; с использованием Foundation; с использованием UIKit;
namespace EffectTest.iOS
{
[Register ("AppDelegate")]
public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
global::Xamarin.Forms.Forms.Init();
new EffectTestLib.iOS.MyEffect();
LoadApplication (new App());
return base.FinishedLaunching (app, options);
}
}
}
Обратите внимание, что я звоню new EffectTestLib.iOS.MyEffect();
быть уверен, что моя библиотека загружается.
Кроме того, проект платформы iOS включает ссылку на библиотеку EffectTestLib.iOS
.
Так что, когда я запустить приложение, это то, что происходит:
2016-04-06 10:17:18.342 EffectTest.iOS[26578:8696061] effect=[EffectTestLib.iOS.MyEffect]
Итак, PlatformEffect решена правильно. Однако он не выводит «Effect Attached» или не выбрасывает NotImplementedException. Также обратите внимание, что если я изменяю свойство MainPage, MyEffect.OnPropertyChanged никогда не вызывается.
Возвращаясь к https://developer.xamarin.com/guides/xamarin-forms/effects/creating/, кажется, я:
- Создание подкласса класса PlatformEffect
- Переопределение OnAttached метод
- Переопределение OnDetached метод
- Добавление атрибута ResolutionGroupName к эффект класс.
- Добавление атрибута ExportEffect к классу эффектов.
И, обращаясь к https://developer.xamarin.com/guides/xamarin-forms/effects/creating/#Consuming_the_Effect_in_C, кажется, что я добавляю эффект к страницам Коллекция эффектов.
Что я здесь делаю неправильно?
код Источник: https://github.com/baskren/PlatformEffect_issue – baskren
Повторяя мой ответ на Сакет, оказывается, что PlatformEffects работают на элементах страницы в Android, но не в прошивке.Я обновил [проект образца github] (https://github.com/baskren/PlatformEffect_issue), чтобы проиллюстрировать это. – baskren