0

Panorama コントロールを使用する場合、アクティブでない PanoramaItem の要素はタップ イベントに応答します。これは、Windows Phone 8 SDK に同梱されているパノラマ アプリケーション ソリューション テンプレートからわずかに変更された次の XAML で再現できます。PanoramaItem がアクティブでない場合でも、2 番目の PanoramaItem の項目がタップ可能であることを確認できます。

<phone:Panorama Title="my application">
    <phone:Panorama.Background>
        <ImageBrush ImageSource="/PanoramaApp1;component/Assets/PanoramaBackground.png"/>
    </phone:Panorama.Background>

    <!--Panorama item one-->
    <phone:PanoramaItem Header="first item">
        <!--Single line list with text wrapping-->
        <phone:LongListSelector Margin="0,0,-22,0" ItemsSource="{Binding Items}">
            <phone:LongListSelector.ItemTemplate>
                <DataTemplate>
                    <StackPanel Margin="0,-6,0,12">
                        <TextBlock Text="{Binding LineOne}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" FontSize="{StaticResource PhoneFontSizeExtraLarge}"/>
                    </StackPanel>
                </DataTemplate>
            </phone:LongListSelector.ItemTemplate>
        </phone:LongListSelector>
    </phone:PanoramaItem>

    <!--Panorama item two-->
    <phone:PanoramaItem>
        <!--Double line list with image placeholder and text wrapping using a floating header that scrolls with the content-->
        <phone:LongListSelector Margin="0,-38,-22,2" ItemsSource="{Binding Items}">
            <phone:LongListSelector.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" Margin="12,2,0,4" Height="105" Width="432" Tap="SecondItem_OnTap">
                        <!--Replace rectangle with image-->
                        <Border BorderThickness="1" Width="99" Height="99" BorderBrush="#FFFFC700" Background="#FFFFC700"/>
                        <StackPanel Width="311" Margin="8,-7,0,0">
                            <TextBlock Text="{Binding LineOne}" TextWrapping="Wrap" Margin="10,0" Style="{StaticResource PhoneTextExtraLargeStyle}" FontSize="{StaticResource PhoneFontSizeLarge}" />
                            <TextBlock Text="{Binding LineTwo}" TextWrapping="Wrap" Margin="10,-2,10,0" Style="{StaticResource PhoneTextSubtleStyle}" />
                        </StackPanel>
                    </StackPanel>
                </DataTemplate>
            </phone:LongListSelector.ItemTemplate>
        </phone:LongListSelector>
    </phone:PanoramaItem>
</phone:Panorama>

2 番目の PanoramaItem の LongListSelector.ItemTemplate にある "SecondItem_OnTap" Tap イベント ハンドラー フックアップに注意してください。

この動作は、電話にプリインストールされていないすべてのアプリ、つまり、Facebook や Pandora などのアプリを含む Microsoft 以外のすべてのアプリで確認されています。持っている人はいますか

  1. まず、Microsoft アプリと Microsoft 以外のアプリで動作が異なる理由についての洞察。と
  2. 次に、この動作を回避する方法について何か提案はありますか?
4

3 に答える 3

0

ええ、これはパノラマ コントロールに関するよく知られた問題です。アプリの 1 つで、非アクティブなパノラマ アイテムの上に透明なオーバーレイを作成することで、この問題に対処しました。この方法の欠点は、オーバーレイの上でサイドスワイプを開始すると、ジェスチャーが無視されることです。最新のアプリでは、この動作を単に無視します。マイクロソフトがそれについて懸念している場合、彼らはそれを修正します。理由については、Microsoft がアプリで標準の電話コントロールを使用していないことは明らかです。

于 2013-05-30T20:16:25.403 に答える
0

答えてくれてありがとう!私は次のようにそれを解決しました:

private void Panorama_OnSelectionChanged(object sender, SelectionChangedEventArgs e) {
    this.UpdateHitTestForPanoItems(this.Panorama.SelectedItem);
}

private void Panorama_OnLoaded(object sender, RoutedEventArgs e) {
    this.UpdateHitTestForPanoItems(this.Panorama.SelectedItem ?? this.Panorama.Items.FirstOrDefault());
}

private void UpdateHitTestForPanoItems(object selectedItem) {
    foreach (PanoramaItem item in this.Panorama.Items) {
        item.IsHitTestVisible = item == this.Panorama.SelectedItem;
    }
}

もちろん、LoadedおよびSelectionChangedイベントをPanorama_OnLoadedおよびPanorama_OnSelectionChangedメソッドにそれぞれ実際に接続する必要があります。これを に移動することもわかりましたBehavior。これは、アプリ内の他のパノラマで使用できます。

于 2013-05-30T20:34:50.200 に答える
0

面倒ですが、パノラマの SelectionChanged イベントをキャプチャして、クリック可能な要素を無効にすることができます。

于 2013-05-30T19:29:05.560 に答える