Silverlight / WP7:.NET调用错误的事件

时间:2011-01-04 13:15:33

标签: silverlight events windows-phone-7

我正在使用Pivot模板开发Windows Phone 7应用程序。这个应用程序有一个菜单工具栏(当然在底部)。

当我点击搜索按钮(MenusButtonsApplication_Click事件转到“一个”选项卡)时,会显示一个包含一些包含某些元素的ListBox的搜索页面。当我点击其中一个元素(ListBoxFoobarSelectionChanged事件)时,我会被重定向到另一个页面以向我显示一些细节。我用这种方法。

要再次返回搜索页面,我必须在搜索按钮(MenusButtonsApplication_Click事件)上单击两次。哪个不正常。 调试后,我发现在调用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>

此界面包含:

  • 包含两个标签(一个和详细信息)
  • 的枢轴(pcPrincipal)
  • 应用程序底栏

对于两个有缺陷的功能,这里是:

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 :(得分:1)

听起来您用来导航的按钮位于列表框中,所以当您第一次“点击”它时,您实际上只是在列表中选择项目,第二次“点击”实际上会触发导航。

如果是这种情况,解决方法是将“后退/搜索”按钮移到hte列表框之外。

或者,让导航发生在SelectionChanged事件的处理程序中。

修改
什么是Phone.Controls.Samples.PivotControl
你为什么使用这个而不是标准的呢?