Silverlight / WP7: .NET вызывает неправильное событие - PullRequest
1 голос
/ 04 января 2011

Я разрабатываю приложение для Windows Phone 7 с помощью шаблона Pivot. Это приложение имеет панель инструментов меню (внизу, конечно).

Когда я нажимаю кнопку поиска (событие 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 Ответ

1 голос
/ 04 января 2011

Звучит так, будто кнопка, которую вы используете для навигации назад, находится в списке, поэтому при первом нажатии на нее вы фактически выбираете элемент в списке, а второй «щелчок» фактически вызывает навигацию.

В этом случае решение состоит в том, чтобы переместить кнопку «Назад / поиск» за пределы списка.

В качестве альтернативы, необходимо иметь навигацию в обработчике для события SelectionChanged.

Редактировать.
Что такое Phone.Controls.Samples.PivotControl?
И почему вы используете это, а не стандартное?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...