2016-05-27 9 views
1

Xamlにボタンがあり、以下のようにclickイベントで呼び出すメソッドを記述しました。SdkとUserAssembliesリンク(すべてのアセンブリのリンク)を使用しているときに実行時にClickeventが見つかりません

public void login_clicked(object sender, EventArgs e) 
{ 
    try 
    { 
      ValidateUser(); 
    } 
    catch (Exception ex){} 
} 

として

<Button BorderRadius="1" BackgroundColor="#FFCA00" Text="Sign In" TextColor="Black" Clicked="login_clicked" HorizontalOptions="FillAndExpand" HeightRequest="44" WidthRequest="220" FontSize="19"> 

とバックエンドのC#で方法の問題は、私がリンクオプションでSdk Assembliesを使用する場合、これは完璧に動作しますが、私はSdk and User Assembliesを使用する場合は、この方法がある程度取り除かれますと、私が取得することです実行時にイベントが発生していないという例外はありませんlogin_clickedが見つかりました。

私はこれがリンカのためだと知っていますが、これの背後にある理由はわかりません。リンカーは、このメソッドが使用されているかどうかをチェックするためにXamlを解析しません(これはメソッドが必要かどうか、または削除しないことを意味します)。

以下のようにC#からイベントを登録すると、リンカーはlogin_clickedメソッドを削除しません。

btnLogin.Clicked += login_clicked; 

答えて

1

は、コンパイル時に解析されません。基本的にリソース文字列です。

つのオプション:

1)フラグ[保存]属性を持つ方法リンカがそれを削除しないように。

[Preserve] 

参考:Cross platform Linking 参考:iOS Linker 参考:Android Linker

2)リンカは、イベントが使用されていることを知っているように、ILにあなたのXAMLをプリコンパイルします。

[assembly: XamlCompilation (XamlCompilationOptions.Compile)] 

これはあなたのXAMLをチェックコンパイル時の追加の利点、XAMLのロードとインスタンス生成時間のいくつかの減少、およびわずかなメモリの削減を持っています。

参考:Using the XAML compiler to increase the performance of a Xamarin.Forms app

+0

はい、私は保存する属性を知っていました。私の主な関心事は、リンカーがxamlファイルを解析するかどうかであった。また、XamlCompilationソリューションもうまく機能します。ありがとう@ SushiHangover –

関連する問題