2011-01-04 4 views
1

저는 Pivot 템플릿을 사용하여 Windows Phone 7 응용 프로그램을 개발 중입니다. 이 응용 프로그램에는 메뉴 도구 모음이 있습니다 (물론 하단에 있음).Silverlight/WP7 : .NET에서 잘못된 이벤트를 호출합니다.

검색 버튼 (MenusButtonsApplication_Click 이벤트 - "하나"탭으로 이동)을 클릭하면 일부 요소가 포함 된 ListBox가있는 검색 페이지가 표시됩니다. 이 요소 (ListBoxFoobarSelectionChanged 이벤트) 중 하나를 클릭하면 다른 페이지로 리디렉션되어 세부 정보를 표시합니다. 나는이 방법을 사용한다.

검색 페이지로 다시 돌아가려면 검색 버튼 (MenusButtonsApplication_Click 이벤트)을 두 번 클릭해야합니다. 어떤게 정상이 아니야. 디버그 후 을 호출하는 동안 첫 번째 클릭이 ListBoxFoobarSelectionChanged과 관련이 있음을 발견했습니다.

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

이 인터페이스를 갖는다 : 두 개의 탭 (원 및 상세)

  • 애플리케이션 하단 바
  • 함유

    • 피벗 (pcPrincipal)

      는 XAML 코드

      버그가있는 두 가지 기능은 다음과 같습니다.

      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

    처음 탐색 할 때 실제로 목록에있는 항목을 선택하고 두 번째 "클릭"이 실제로 탐색을 트리거하기 때문에 처음 탐색 할 때 목록 상자에있는 것처럼 탐색하는 것처럼 들립니다.

    이 경우 해결 방법은 hte listbox 외부의 "뒤로/검색"단추를 이동하는 것입니다.

    또는 탐색을 SelectionChanged 이벤트의 처리기에서 수행해야합니다.

    편집.
    Phone.Controls.Samples.PivotControl은 무엇입니까?
    왜 표준이 아닌 이것을 사용하고 있습니까?

    +0

    버튼이 ListBox에 없습니다. 메뉴 막대 (하단)에 있습니다. – Zakaria

    +0

    @Zakaria이 문제를 보여주기 위해 전체 코드를 표시하면이 사실을 알게되고 추측 할 필요가 없습니다. –

    +0

    편집 된 게시물에서 코드를 찾을 수 있습니다. – Zakaria

    관련 문제