2011-01-04 16 views
1

私はPivotテンプレートを使用してWindows Phone 7アプリを開発しています。このアプリにはメニューツールバーがあります(コースの最下部にあります)。Silverlight/WP7:.NETが間違ったイベントを呼び出す

検索ボタン(MenusButtonsApplication_Clickイベント)をクリックすると、いくつかの要素を含むリストボックスを含む検索ページが表示されます。これらの要素(ListBoxFoobarSelectionChangedイベント)の1つをクリックすると、別のページにリダイレクトされて詳細が表示されます。私はこの方法を使用します。

再度検索ページに戻るには、検索ボタン(MenusButtonsApplication_Clickイベント)を2回クリックする必要があります。これは正常ではありません。 デバッグ後、最初のクリックがListBoxFoobarSelectionChangedに関連し、MenusButtonsApplication_Clickを呼び出していることがわかりました。

これは、XAMLコードである:

<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> 

このインタフェースはあります

  • 二つのタブ(Oneと詳細)
  • アプリケーション底バー
を含むピボット(pcPrincipal)を

2つのバグの機能については、ここにあります:

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; 
        } 
       } 
      } 
     } 

.NETのバグですか?どうすれば解決できますか?私はそれを手動で発射すべきでしょうか?

ありがとうございます。

+1

より完全な例を表示できますか。 –

+0

コードを追加していただきありがとうございますが、完了していません。無効なXAMLを示し、CSはXAMLにないオブジェクトを示します。 –

答えて

1

リストボックス内に戻るために使用しているボタンのように聞こえるので、初めて「クリック」するとリスト内の項目が実際に選択され、2回目の「クリック」が実際にナビゲーションをトリガーします。

この場合、解決策は、「戻る/検索」ボタンをhteリストボックスの外に移動することです。

また、ナビゲーションをSelectionChangedイベントのハンドラで実行させることもできます。

編集。
Phone.Controls.Samples.PivotControlとは何ですか?
なぜ、これを標準のものではなく使用していますか?

+0

ボタンはListBoxにありません。メニューバー(下部)にあります。 – Zakaria

+0

@Zakariaこの問題を示す完全なコードを表示すると、これを知っていて推測する必要はありません。 –

+0

編集した投稿でコードを見つけることができます。 – Zakaria

関連する問題