2011-01-04 12 views
1

Ich entwickle eine Windows Phone 7-App mit der Pivot-Vorlage. Diese App hat eine Menüleiste (am Ende natürlich).Silverlight/WP7: .NET ruft das falsche Ereignis auf

Wenn ich auf die Suchschaltfläche klicke (MenusButtonsApplication_Click Ereignis, um zur Registerkarte "One" zu gelangen), wird eine Suchseite mit einer ListBox angezeigt, die einige Elemente enthält. Wenn ich auf eines dieser Elemente klicke (ListBoxFoobarSelectionChanged Ereignis), werde ich auf eine andere Seite weitergeleitet, um mir einige Details zu zeigen. Ich benutze diese Methode.

Um wieder auf die Suchseite zu gelangen, muss ich zweimal auf den Suchknopf klicken (MenusButtonsApplication_Click event). Was nicht normal ist. Nach einem Debugging habe ich festgestellt, dass der erste Klick mit dem ListBoxFoobarSelectionChanged beim Aufruf der MenusButtonsApplication_Click verbunden ist.

Dies ist der XAML-Code:

<phone:PhoneApplicationPage 
    x:Class="Test.Soft.MainPage" 
    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:sys="clr-namespace:System;assembly=mscorlib" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:controls="clr-namespace:Phone.Controls.Samples;assembly=Phone.Controls.Samples" 
    xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit" 
    SupportedOrientations="PortraitOrLandscape" Orientation="Portrait" 
    shell:SystemTray.IsVisible="True" 
    mc:Ignorable="d" d:DesignHeight="696" d:DesignWidth="480"> 

    <!--Ressources application--> 

    <phone:PhoneApplicationPage.FontFamily> 
     <StaticResource ResourceKey="PhoneFontFamilyNormal"/> 
    </phone:PhoneApplicationPage.FontFamily> 
    <phone:PhoneApplicationPage.FontSize> 
     <StaticResource ResourceKey="PhoneFontSizeNormal"/> 
    </phone:PhoneApplicationPage.FontSize> 
    <phone:PhoneApplicationPage.Foreground> 
     <StaticResource ResourceKey="PhoneForegroundBrush"/> 
    </phone:PhoneApplicationPage.Foreground> 


    <Grid x:Name="LayoutRoot" Background="Transparent"> 
     <controls:PivotControl x:Name="pvPrincipal" SelectedIndex="0" TitleTemplate="{StaticResource titleTemplate}" HorizontalAlignment="Left" Width="480" FontSize="22" DefaultItemWidth="480" FontStretch="Normal" Height="697" VerticalAlignment="Top" Margin="0,27,0,0" HorizontalContentAlignment="Left" IsEnabled="True" Visibility="Visible"> 

      <!-- Recherche de comptes --> 
      <controls:PivotItem Name="pivotOne" Header="One" Loaded="PivotOne_Loaded"> 
       <Grid Background="Transparent"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="192*" /> 
         <RowDefinition Height="423*" /> 
        </Grid.RowDefinitions> 

        <StackPanel Grid.Row="0"> 
         <ListBox Name="lbSearch" Width="462" Height="377" HorizontalAlignment="Left" BorderThickness="1" 
           VerticalAlignment="Bottom" SelectionChanged="ListBoxCompteSelectionChanged" > 
          <ListBox.ItemTemplate> 
           <DataTemplate> 
            <StackPanel Orientation="Horizontal"> 
             <TextBlock Padding="25,0,0,10" Text="{Binding FoobarCode}" Width="80" HorizontalAlignment="Right" /> 
             <TextBlock Text="- " /> 
             <TextBlock Text="{Binding FoobarDescription}" Padding="5,3,5,5" /> 
            </StackPanel> 
           </DataTemplate> 
          </ListBox.ItemTemplate> 
         </ListBox> 
        </StackPanel> 
       </Grid> 
      </controls:PivotItem> 


      <!-- Details --> 
      <controls:PivotItem x:Name="pivotDetails" Header="Details" > 
       <Grid Name="grDetail" Background="Transparent"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="398*" /> 
         <RowDefinition Height="167*" /> 
        </Grid.RowDefinitions> 
        <ListBox> 
         <StackPanel Margin="5,0,12,20" Grid.ColumnSpan="2"> 
          <TextBlock FontSize="26" FontWeight="Bold" 
            FontStyle="Normal" Foreground="White" HorizontalAlignment="Left">Détail d'un compte</TextBlock> 
         </StackPanel> 

         <StackPanel Grid.Row="1" > 

          <TextBlock Text="{Binding Path= FoobarCode}" Name="tbCode" HorizontalAlignment="Left" FontWeight="Bold"/> 
          <TextBlock Text="{Binding Path= Description}" Name="tbDescription" FontWeight="Bold" HorizontalAlignment="Left" /> 

         </StackPanel> 

         <StackPanel Grid.Row="2" > 
         </StackPanel> 
        </ListBox> 
       </Grid> 
      </controls:PivotItem> 

    </Grid> 
    <!-- ApplicationBar--> 
    <phone:PhoneApplicationPage.ApplicationBar > 
     <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"> 
      <shell:ApplicationBarIconButton x:Name="btnToPivotOne" IconUri="/Icons/appbar.plan.rest.png" Text="One" Click="MenusButtonsApplication_Click"></shell:ApplicationBarIconButton> 
      <shell:ApplicationBar.MenuItems> 
       <shell:ApplicationBarMenuItem x:Name="menuToPivotOne" Text="To pivot One" Click="MenusButtonsApplication_Click"></shell:ApplicationBarMenuItem> 
       </shell:ApplicationBarMenuItem> 
      </shell:ApplicationBar.MenuItems> 
     </shell:ApplicationBar> 
    </phone:PhoneApplicationPage.ApplicationBar> 
</phone:PhoneApplicationPage> 

Diese Schnittstelle hat:

  • A Drehpunkt (pcPrincipal) zwei Register enthält (ein und Details)
  • Eine Anwendung Bodenleiste

Für die zwei Buggy-Funktionen, hier sind sie:

private void ListBoxFoobarSelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      grDetail.DataContext = lbSearch.SelectedItem; 
      lblDescriptionType.Text = mainVM.RetourneDescriptionTypeEncours(); 
      pvPrincipalSelectedItem = pivotDetail; 
     } 



private void MenusButtonsApplication_Click(object sender, EventArgs e) 
     { 
      if (sender is ApplicationBarIconButton) 
      { 
       switch ((sender as ApplicationBarIconButton).Text) 
       { 
        case "One": 
         // Affichage pivot plan 
         pvAccueil.Dispatcher.BeginInvoke(() => 
         { 
          pvPrincipal.SelectedItem = pivotOne; 
         }); 
         break; 

        default: 
         break; 
       } 
      } 
      else 
      { 
       if (sender is ApplicationBarMenuItem) 
       { 
        switch ((sender as ApplicationBarMenuItem).Text) 
        { 
         case "To pivot One": 
          pvAccueil.Dispatcher.BeginInvoke(() => 
          { 
           pvPrincipal.SelectedItem = pivotOne; 
          }); 
          break; 
         default: 
          break; 
        } 
       } 
      } 
     } 

Ist es ein .NET-Fehler? Wie kann ich es lösen? Darf ich es manuell auslösen?

Vielen Dank.

+1

Können Sie bitte ein vollständigeres Beispiel zeigen. –

+0

Vielen Dank für das Hinzufügen von Code, aber es ist nicht vollständig. Es zeigt ungültiges XAML an, und das CS verweist auf Objekte, die sich nicht in dem XAML befinden. –

Antwort

1

Es klingt wie die Schaltfläche, die Sie verwenden, um zurück zu navigieren, ist in der Listbox, also das erste Mal Sie "klicken" Sie tatsächlich nur das Element in der Liste auswählen und der zweite "Klick" tatsächlich die Navigation auslöst.

Wenn dies der Fall ist, ist die Lösung, die Schaltfläche "Zurück/Suchen" außerhalb der Liste zu verschieben.

Alternativ kann die Navigation im Handler für das SelectionChanged-Ereignis stattfinden.

Bearbeiten.
Was ist Phone.Controls.Samples.PivotControl?
Und warum verwenden Sie diese anstelle der Standard?

+0

Die Schaltfläche befindet sich nicht in der ListBox: Sie befindet sich in der Menüleiste (unten). – Zakaria

+0

@Zakaria Wenn Sie den vollständigen Code zeigen, um dieses Problem zu demonstrieren, dann würde ich das wissen und nicht raten müssen. –

+0

Sie können den Code in dem bearbeiteten Post finden. – Zakaria

Verwandte Themen