我相信我无法连接PlatformEffect。它似乎正在解决但没有附加。以下是名为EffectTestLib.iOS
的iOS库项目中的PlatformEffect:
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);
}
}
}
所以,如果它附加了,它应该输出“Effect Attached”并抛出NotImplementedException
。
以下是使用此PlatformEffect的应用程序的PCL代码:
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; 使用基金会; 使用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/,我似乎是:
并且,回头看https://developer.xamarin.com/guides/xamarin-forms/effects/creating/#Consuming_the_Effect_in_C,似乎我将效果添加到效果集合页面。
我在这里做错了什么?
答案 0 :(得分:0)
我已经看过你的项目并修改了它的工作代码, 它不会在MainPage上调用, 观察是在页面上不起作用,在它工作的视图上(将在详细查找后编辑此观察)。 试着这样做。
using Xamarin.Forms;
namespace EffectTest {
public class App : Application {
public App () {
var label = new Label();
label.Effects.Add (Effect.Resolve ("MyCompany.EffectCheck"));
MainPage = new RootPage ();
var effect = Effect.Resolve ("MyCompany.EffectCheck");
System.Diagnostics.Debug.WriteLine ("effect=[{0}]",effect);
//MainPage.Effects.Add(Effect.Resolve ("MyCompany.EffectCheck"));
}
protected override void OnStart () {
}
protected override void OnSleep () {
}
protected override void OnResume () {
}
}
}
using Xamarin.Forms;
namespace EffectTest
{
public class RootPage:ContentPage
{
public RootPage()
{
Content = new StackLayout () {
Children = {
new Label ()
}
};
// this.Effects.Add(Effect.Resolve ("MyCompany.EffectCheck")); will not work
Content.Effects.Add(Effect.Resolve ("MyCompany.EffectCheck")); // it will work;
}
}
}