2016-10-18 4 views
3

から入れ子になったクラスXamarinが戻って与えることがエラーのプロパティを設定することはできませんAmsterdamTheMapV3はXAML

問題は、私がfooを定義しようとしていますということですが、私はそれを行うものは何でもdoenst work。問題はxmls:ローカル名前空間の内側にあると私は思う。たぶん私は自分のコードの中で愚かな間違いをするかもしれない。

これは、Windows、android and apple用のXamarin.formsプロジェクトです。

XAMLファイル:

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="AmsterdamTheMapV3.CityGuide" 
      xmlns:local="clr-namespace:AmsterdamTheMapV3"> 
    <Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" /> 
    <ScrollView Orientation="Vertical" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"> 
    <StackLayout Orientation="Vertical" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Spacing="0"> 

     <!-- Button1 --> 
     <Image 
      x:Name="CityGuideButton1" 
      Source="shopping_gray.png" 
      Aspect="Fill" 
      HorizontalOptions="FillAndExpand" 
       VerticalOptions ="FillAndExpand" 
      local:Foo.Tag="button1"> 
     <Image.GestureRecognizers> 
      <TapGestureRecognizer 
      Tapped="Categorie_Onclick" 
      NumberOfTapsRequired="1"/> 
     </Image.GestureRecognizers> 
     </Image> 
    </StackLayout> 
    </ScrollView> 
</ContentPage> 

Csのファイル:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

using Xamarin.Forms; 

namespace AmsterdamTheMapV3 
{ 
    public partial class CityGuide : ContentPage 
    { 
     public CityGuide() 
     { 
      InitializeComponent(); 
     } 

     public class Foo 
     { 
      public static readonly BindableProperty TagProperty = BindableProperty.Create("Tag", typeof(string), typeof(Foo), null); 

      public static string GetTag(BindableObject bindable) 
      { 
       return (string)bindable.GetValue(TagProperty); 
      } 

      public static void SetTag(BindableObject bindable, string value) 
      { 
       bindable.SetValue(TagProperty, value); 
      } 
     } 


     async void Categorie_Onclick(Object sender, EventArgs args) 
     { 
      Image cmd = sender as Image; 
      string txt = Foo.GetTag(cmd); 
      await Navigation.PushAsync(new CategoriePage(txt)); 
     } 
    } 
} 

私はsomewannが私を助けることができることを願っています。
必要に応じてさらに情報を提供できます。
ありがとうございます!

+0

Xamlはおそらくあなたの期待する内容を表示しないことに注意してください。 contentPageには2つの子、 'Label'と' ScrollView'がありますが、 'ContentPage'は' Content'という単一のプロパティしか受け付けません。執筆時点では、Xamarin.Forms Xamlパーサーは非常に寛容で、2つの項目のうちの1つは無視されます(通常は最後の項目を除くすべて)が、将来変更されて投げられる可能性があります。 –

+0

この質問のアップロード後に変更しました。ラベルはそこにあるはずではなかった。しかし、まだフィードバックに感謝します。そして、私はこれを念頭に置いておきます。 –

答えて

8

Xamlからネストされたクラスを参照することはできません。

あなたは私にこれを引用したり、Googleにそれを引用したりできますが、これは普遍的な真実です。その理由は、Xaml Parsersは、添付された(Bindable | Dependency)プロパティをドット記号に基づいてネストされたクラスアクセスから区別できないためです。

あなたのケースでは、CityGuideからFooクラスを直接名前をつけて移動するとうまくいくはずです。

xmlns宣言xmlns:local="clr-namespace:AmsterdamTheMapV3"は、現在のアセンブリを参照しているので、assembly=の部分がないと正しくなります。同様の答えに

さらに詳しい情報:https://stackoverflow.com/a/14546917/1063783

一部は(それが反射で行われているように)なぜ、ネストされたクラスの+記号を使用しないで頼むかもしれません。問題は、+記号を含む名前が有効なxml要素名(https://www.xml.com/pub/a/2001/07/25/namingparts.html)でないことです。

-1

アセンブリの参照がありません。 Xamarinから

xmlns:local="clr-namespace:AmsterdamTheMapV3; assembly=AmsterdamTheMapV3"> 

は:などAppConstantsなどの共有アプリケーションPCLへのローカルアクセスクラスに

、XAMLのプログラマは、多くの場合、プレフィックスがローカル使用します。名前空間宣言には、CLR(共通言語ランタイム)名前空間名(C#名前空間定義またはusingディレクティブに表示される名前である.NET名前空間名)およびコードを含むアセンブリを指定する必要があります。

+0

はまだ同じエラーを助けていませんでした –

+0

@ N.Smedingプロジェクトファイルのアセンブリ名を確認してください、それらは一致する必要があります。私はそれが* AmsterdamTheMapV3 *であると仮定していましたが、あなたのProjectFile.csprojに行き、アセンブリ名を見つけてアセンブリで置き換えてください。= –

+0

ここで、asssembly名がpropeties内で見つからないことがわかります。 –