2014-05-05 1 views
1

J'ai fait une zone de texte dans vb.net pour Windows Phone 8.Faire la zone de liste cliquable

Il fonctionne très bien, mais je veux faire cliquable listbox.

Si vous appuyez sur le texte, rien ne se passe. Quelqu'un peut-il m'aider s'il vous plaît? Voici mon code:

Xaml:

<phone:PhoneApplicationPage 
    x:Class="PhoneApp1.LijstRestaurants" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" 
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    FontFamily="{StaticResource PhoneFontFamilyNormal}" 
    FontSize="{StaticResource PhoneFontSizeNormal}" 
    Foreground="{StaticResource PhoneForegroundBrush}" 
    SupportedOrientations="Portrait" Orientation="Portrait" 
    mc:Ignorable="d" 
    shell:SystemTray.IsVisible="True"> 

    <Grid x:Name="LayoutRoot" Background="#FF386A06"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 

     <!--TitlePanel contains the name of the application and page title--> 
     <StackPanel Grid.Row="0" Margin="12,17,0,28"/> 

     <!--ContentPanel - place additional content here--> 
     <TextBox x:Name="txtSearch" TextChanged="txtSearch_TextChanged" Text="" Margin="0,48,0,552" Height="80" ></TextBox> 
     <ListBox x:Name="listBox" FontSize="21" Height="580" Margin="0,100,0,0"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="{Binding Restaurantnaam}" Width="440" Margin="10,15,0,0" Height="80"/> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
     <TextBlock HorizontalAlignment="Left" Margin="12,10,0,0" TextWrapping="Wrap" Text="Zoek je gewenste restaurant" VerticalAlignment="Top" FontSize="36" TextAlignment="Center"/> 
    </Grid> 

</phone:PhoneApplicationPage> 

VB.net:

Partial Public Class LijstRestaurants 
    Inherits PhoneApplicationPage 
    Private lstRestaurants As List(Of ClassRestaurants) = Nothing 
    Public Sub New() 
     InitializeComponent() 
    End Sub 

    Protected Overrides Sub OnNavigatedTo(args As NavigationEventArgs) 


     lstRestaurants = New List(Of ClassRestaurants)() 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "ABDIJ DER TRAPPISTEN" & vbNewLine & "Scheldemolenstraat Haven 1800, 9130 Beveren" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "ASTER-CAMPUS MELVEREN" & vbNewLine & "Antwerpsesteenweg 496, 2390 Malle" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "BAYER LILLO" & vbNewLine & "Retieseweg 111, 2440 Geel" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "CHR PELTZER LA TOURELLE" & vbNewLine & "Sint-jozefstraat 35, 2000 Antwerpen" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "CLINIQUE SAINT-JEAN" & vbNewLine & "Haven 1071 - Kapeldijk 40, 9130 Kallo" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "CPAS NIVILLES" & vbNewLine & "Minderbroedersstraat 5, 3800 Sint-Truiden" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "CUISINE CENTRALE CLINIQUE SAIN" & vbNewLine & "Vaartkaai 2, 2170 Merksem" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "DANONE N.V." & vbNewLine & "Rue Hauzeur de Simony 20, 4800 Verviers" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "ELECTRABEL KALLO" & vbNewLine & "Stiftstrasse 9, 4711 Astenet" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "ELECTRABEL KCD DOEL" & vbNewLine & "Haven 1992 Ketenislaan 2, 9130 Kallo" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "ELIA MERKSEM" & vbNewLine & "Huffengrasse 4/6, 4700 Eupen" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "ENI GAS & POWER" & vbNewLine & "Haven 507 Scheldelaan 420, 2040 Antwerpen" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "EUROPESE COMMISSIE IRMM" & vbNewLine & "Melverencentrum 111, 3800 Sint-Truiden" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "KARMEL BRUGGE" & vbNewLine & "Rue Samiette 70, 1400 Nivilles" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "KATHARINESTIFT" & vbNewLine & "Avenue Leopold Wiener 20, 1170 Brussel" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "LANXESS KALLO" & vbNewLine & "Lindestraat 3, 1540 Herne" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "MEALS ON WHEELS" & vbNewLine & "Sint-Jozefstraat 1A, 9041 Oostakker" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "MICROFIBRES EUROPE N.V." & vbNewLine & "Boulevard du jardin botanique 32, 1000 Brussel" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "MINDERBROEDERS" & vbNewLine & "Boulevard du jardin botanique 32, 1000 Brussel" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "O.C.M.W. HARELBEKE" & vbNewLine & "Lange Meire 56, 9270 Laarne" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "O.C.M.W. NINOVE" & vbNewLine & "Rue Guimard 1, 1040 Brussel" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "O.C.M.W. WIELSBEKE" & vbNewLine & "Hernieuwenstraat 15, 8710 Wielsbeke" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "O.C.M.C. WAREGEM - WZC DE MEERS" & vbNewLine & "Kapelaniestraat 2, 8953 Heuvelland-Wijtschate" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "O.C.M.W. HEUVELLAND ST MEDARD WZC." & vbNewLine & "Schakelstraat 41, 8790 Waregem" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "OUDE ABDIJ VAN DRONGEN V.Z.W." & vbNewLine & "Drongenplein 26, 9031 Drongen" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "RESIDENCE SAINTE-ANE" & vbNewLine & "Centrumlaan 173, 9400 Ninove" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "RUSTHUIS SINT-FELIX" & vbNewLine & "Vrijdomkaai 31, 8530 Harelbeke" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "SANKT-NIKOLAUS HOSPITAL" & vbNewLine & "Stationstraat 170, 3110 Rotselaar" _ 
     }) 
     lstRestaurants.Add(New ClassRestaurants() With { _ 
      .Restaurantnaam = "SINT-JOZEF INSTITUUT" & vbNewLine & "Ezelstraat 28, 8000 Brugge" _ 
     }) 
     Me.listBox.ItemsSource = lstRestaurants 
    End Sub 

    Private Sub txtSearch_TextChanged(sender As Object, e As TextChangedEventArgs) 
     If lstRestaurants IsNot Nothing Then 
      Me.listBox.ItemsSource = lstRestaurants.Where(Function(w) w.Restaurantnaam.ToUpper().StartsWith(txtSearch.Text.ToUpper())) 
     End If 
    End Sub 

End Class 

Merci.

Répondre

0

Au lieu de bidouiller avec des boutons ou des événements taraudés il vous suffit de vous abonner à l'événement SelectionChanged de votre ListBox qui est tiré chaque fois que vous appuyez sur un élément de celui-ci.

<ListBox SelectionChanged="ListBox_SelectionChanged"> 
    <ListBox.ItemTemplate> 
     <!-- ... ->     
    </ListBox.ItemTemplate> 
</ListBox> 

Dans votre code derrière vous pouvez attraper cet événement et découvrir, qui de vos articles (Restaurants) l'a causé.

private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if ((sender as ListBox).SelectedItem != null) 
    { 
     // This is your selected item:  
     ClassRestaurants selectedRestaurant = (sender as ListBox).SelectedItem as ClassRestaurants; 
     MessageBox.Show(selectedRestaurant.Restaurantnaam, "You selected:", MessageBoxButton.OK);     
    } 
} 

Désolé que c'est le code C#, mais je suis sûr que vous pouvez le traduire en VB.net

espoir qui aide.

+0

Merci d'avoir répondu, mais comment puis-je obtenir une boîte de message différente lorsque je clique sur un texte différent? Je pense qu'avec ce code, vous obtenez toujours le même message. – user3603407

+0

L'avez vous essayé? Vous devriez toujours obtenir le nom du restaurant que vous avez sélectionné. C'est ce que tu veux, n'est-ce pas? –

+0

Ouais, merci! J'ai une autre question: je veux obtenir les différentes heures d'ouverture si je clique sur un restaurant ... Maintenant, il y a toujours le même messagebox avec le nom du restaurant. Pouvez-vous m'aider s'il vous plaît? – user3603407

-1

Ajouter un événement Tap pour textBlock

Ou remplacez TextBlock avec le bouton et ajouter un événement de clic et de lier son contenu au texte

<ListBox x:Name="listBox" FontSize="21" Height="580" Margin="0,100,0,0"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding Restaurantnaam}" Width="440" Margin="10,15,0,0" Height="80" Tap="TextBlock_Tap"/> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

    <ListBox x:Name="listBox" FontSize="21" Height="580" Margin="0,100,0,0"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <Button Content="{Binding Restaurantnaam}" Width="440" Margin="10,15,0,0" Height="80" Click="Button_Click"/> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

Assurez Textblock_Tap vous ou Button_Click (selon ce que vous utilisez) dans votre code derrière fichier (PhoneApp1.LijstRestaurants.xaml.cs). Ci-dessous le code C#, assez facile à modifier pour vb.net.

private void TextBlock_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
    {} 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     Button b = sender as Button; 

     // Use datacontext to get associated ClassRestaurants 

     ClassRestaurants c = (b.DataContext) as ClassRestaurants;    
    } 
+0

Si je remplace le bloc de texte par un bouton, j'obtiens un débogueur.break. Pourriez-vous me montrer le code que je dois changer s'il vous plaît? THX. – user3603407

+0

Les événements tap ou click doivent être définis dans votre code derrière le fichier. Ma réponse est pour C# mais je suppose que c'est assez simple pour être ajusté à vb.net –

+0

Merci pour la réponse, mais comment puis-je donner à tous les différents boutons un messagebox différent? – user3603407

Questions connexes