2016-06-04 5 views
2

Hallo Ich arbeite an einer mobilen App, die mit Xamarin Formen erstellt wird die Hauptseite ist eine Listenansicht mit dem Listen Kategorien. was ich brauche, ist zu geschehen, wenn der Benutzer ein Element in der Listenansicht klickt neue Seite in der App heren den XAML-Code öffnet:Wie öffne ich eine andere Seite, wenn ein Listenansichtselement in Xamarin-Formularen ausgewählt ist?

<?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="SchoolTools.HomePage"> 
    <ListView HasUnevenRows="true"> 
       <ListView.ItemTemplate> 
     <DataTemplate> 
     <ViewCell> 
      <Frame Padding="0,0,0,8" BackgroundColor="#d2d5d7"> 
      <Frame.Content> 
       <Frame Padding="15,15,15,15" OutlineColor="Gray" BackgroundColor="White"> 
       <Frame.Content> 
        <StackLayout Padding="20,0,0,0" Orientation="Horizontal" HorizontalOptions="CenterAndExpand"> 
        <Label x:Name="Internet" Text="Internet" HorizontalOptions="Center"> 
         </Label> 
         <Label x:Name ="Math" Text="Math" HorizontalOptions="Center"> 
         </Label> 
         <Label x:Name="Science" Text="Science" HorizontalOptions="Center"> 
         </Label> 
         <Label x:Name ="Handwriting" Text="Handwriting" HorizontalOptions="Center"> 
         </Label> 
          <Label x:Name ="FlashCards" Text="FlashCards" HorizontalOptions="Center"> 
         </Label> 
         <Label x:Name="Books" Text="Books" HorizontalOptions="Center"> 
         </Label> 
        </StackLayout> 
       </Frame.Content> 
       </Frame> 
      </Frame.Content> 
      </Frame> 
     </ViewCell> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
    </ListView> 
</ContentPage> 

so meine Frage ist, was ist der Code beind zu machen die Mathematik eingereicht nehmen Sie in die MathToolsHome-Klasse? und so weiter und so fort?

jede Hilfe wäre erstaunlich!

Vielen Dank im Voraus! :)

+1

jede Zeile in der Liste 6 Etiketten drin? Oder wollen Sie nur eine Liste mit 6 Zeilen und einem Label pro Zeile? – Jason

Antwort

1

Du bist wahrscheinlich für TapGestureRecognizer suchen, die Sie im Konstruktor für SchoolTools.HomePage nach dem Aufruf von InitializeComponent einrichten würde():

var mathTapRecognizer = new TapGestureRecognizer(); 
mathTapRecognizer.Tapped += async delegate { 
    // Whatever you need to do here, like 
    await Navigation.PushAsync(new MathToolsHome()); 
}; 
Math.GestureRecognizers.Add(mathTapRecognizer); 

Unter der Annahme, dass MathToolsHome eine Seite von etwas ist Sortieren.

EDIT

Hinzufügen von XAML-Lösung ...

Mit der Art und Weise, dass Sie Ihre XAML haben, der Ansatz umrissen werde ich nicht ganz funktioniert, wie Sie die Einstellungen nicht auf Mitglieder verändern können DataTemplates auf diese Weise (deshalb bindet der Compiler Math an System.Math und nicht an das Label in Ihrem Layout).

Der einfachste Weg, dies zu tun ist, den TapGestureRecognizer in Ihrem XAML, mit einem Aufruf zu Ihrem Code-behind hinzuzufügen.

XAML:

<Label x:Name ="Math" Text="Math" HorizontalOptions="Center"> 
    <Label.GestureRecognizers> 
    <TapGestureRecognizer Tapped="Math_Clicked"/> 
    </Label.GestureRecognizers> 
</Label> 

Und in Ihrem Code hinter:

public async void Math_Clicked(object sender, EventArgs e) 
{ 
    await Navigation.PushAsync(new MathToolsHome()); 
} 

Ich habe geschrieben mehr Datatemplate-Implementierungen mit reinem C# statt XAML, aber dieser Ansatz funktionieren sollte.

+0

Danke für die Antwort Ich bekomme diesen Fehler, wenn ich Ihren Code versuche: /Users/JailBrak0e/Projects/SchoolTools/SchoolTools/HomePage.xaml.cs(9,9): Fehler CS0117: 'System.Math 'enthält keine Definition für 'GestureRecognizers '(CS0117) (SchoolTools) – Phoneswapshop

+0

Siehe aktualisierte Antwort, die mit einem XAML-definierten DataTemplate besser funktionieren sollte. – DavidS

+0

Ich glaube nicht, dass es so kompliziert sein muss, Christines Antwort sollte gut funktionieren. – Tharkius

4

definiert itemSelected für Ihre Listenansicht:

<ListView HasUnevenRows="true" 
      ItemSelected="OnItemSelected"> 

die Handler Dann Code:

private void OnItemSelected(object sender, SelectedItemChangedEventArgs e) 
    { 
     var item = e.SelectedItem; 
     // Your code here 
    } 
Verwandte Themen