36

Windows Phone 8 で LongListSelector コントロールを使用していますが、アイテムのタップを処理する最善の方法がわかりません。私が見つけたいくつかの例は、SelectionChanged イベントに依存しています。ただし、新しいページを開く項目をタップして反撃し、同じ項目をもう一度タップすると、この項目が既に選択されているため機能せず、SelectionChanged がトリガーされないため、このソリューションにはバグがあります。

タップ イベントに登録して、現在選択されているアイテムをタップされたアイテムとして使用しようとしましたが、現在選択されているアイテムが予期したものと異なる場合があります。

ItemTemplate をボタンにラップして、各アイテムのタップを処理することもできますが、単純なリスト アイテムのように見せるには、ボタンのスキンを変更する必要があります。

最後に、このような基本的なことを達成するのがなぜそれほど複雑なのか理解できません。私が見逃したシンプルで標準的な方法はありますか?

2 つ目の願いは、アイテムをタップしたときにアイテムに効果を与えることです。それを行う標準的な方法はありますか?

4

6 に答える 6

41

各イベントの最後にnullLongListSelectorを使用できます。いえSelectedItemSelectionChanged

<phone:LongListSelector x:Name="LLS" SelectionChanged="LLS_SelectionChanged">

そしてイベントハンドラ:

private void LLS_SelectionChanged(object sender, SelectionChangedEventArgs e) {

  // If selected item is null, do nothing
  if (LLS.SelectedItem == null)
    return;

  // Navigate to the next page
  NavigationService.Navigate(new Uri("/nextpage.xaml", UriKind.Relative));

  // Reset selected item to null
  LLS.SelectedItem = null;
}

SelectionChanged イベントを 2 回発生させますが、2 回目は何も起こらず、探している動作が得られるはずです (つまり、に設定SelectedItemすると新しいイベントnullがトリガーされますが、この 2 番目のイベントは if でキャッチされます)。 SelectionChanged-声明)

質問の 2 番目の部分については、新しい質問を投稿したほうがよいかもしれません。

于 2013-01-09T10:30:45.463 に答える
9

Tapイベント処理でそれを行いました。

Selectedプロパティを使用したくないのですが、この方法でアイテムをタップします(バグには気づいていません)。

MyListItemClass item = ((FrameworkElement)e.OriginalSource).DataContext 
                                                             as MyListItemClass;

また、e.OriginalSourceからVisualTreeをナビゲートすることで、元のアイテムContentPresenterを簡単に取得できます。そのように:

ContentPresenter itemPresenter = SomeHelperClass
                              .FindParent<ContentPresenter>(e.OriginalSource,"");

FindParentは、この質問で子を検索するのと似ています。名前または種類でWPFコントロールを検索するにはどうすればよいですか。

ContentPresenterは、必要に応じてアイテムテンプレートを手動で変更するために必要なオブジェクトです(たとえば、「選択済み」状態を設定するため)。

于 2013-01-13T22:21:42.353 に答える
1
 private void Item_tap(object sender, RoutedEventArgs e)
        {
            var element = (FrameworkElement)sender;
            DataSource data = (DataSource)element.DataContext;


        }
于 2013-11-13T10:50:45.953 に答える
0

2 つ目の願いは、アイテムをタップしたときにアイテムに効果を与えることです。それを行う標準的な方法はありますか?

これを行うには、これをコントロール (またはこの効果を持たせたいスタックパネル) に追加する必要があります。

<StackPanel toolkit:TiltEffect.IsTiltEnabled="True">
于 2014-04-29T12:03:13.330 に答える
0

ハリルの答えに加えて:

まず、NuGet で Windows Phone Toolkit (WPtoolkit) をインストールする必要があります。さらに、PhoneApplicationPage に名前空間宣言を追加します。

xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"

toolkit:TiltEffect.IsTiltEnabled="True"この後、コントロール定義に追加できます。

NOKIA によって文書化されています: http://developer.nokia.com/community/wiki/Tilt_Effect_for_Windows_Phone

オリバー

于 2014-11-18T07:53:56.107 に答える
0

最初にこれを *.xaml ページに追加します

LongListSelectorSelectionChanged="listBox_SelectionChanged"

次のようになります。

<toolkit:LongListSelector x:Name="listBox" SelectionChanged="listBox_SelectionChanged">

次に、イベント ハンドラーの *.xaml.cs ファイルで

private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    // Write your logic on what you want to do with the selected item
}
于 2014-10-28T10:04:35.833 に答える