0

ContextMenu に少し問題があります。ContextMenu をクリックすると、LongList でアイテムが選択されないことがあります。これにより、ユーザーがどのアイテムをクリックしたのかがわからないという問題が発生します。最初にアイテムをクリックしてからコンテキストメニューを保持すると機能しますが、ユーザーがクリックして保持するたびにこれを機能させるにはどうすればよいですか?

ここに私のxamlがあります

<phone:LongListSelector x:Name="List"
                        Margin="0,0,-12,0" 
                        ItemsSource="{Binding ListItems}"
                        Height="470" Tap="List_OnTap">
    <phone:LongListSelector.ItemTemplate>
        <DataTemplate>
            <StackPanel Margin="0,0,0,17">
                <TextBlock Text="{Binding Name}" 
                           TextWrapping="Wrap" 
                           Style="{StaticResource PhoneTextExtraLargeStyle}">
                    <toolkit:ContextMenuService.ContextMenu>
                        <toolkit:ContextMenu IsZoomEnabled="false">
                            <toolkit:MenuItem Header="Add as favorit" 
                                              Click="AddFavorite" />
                        </toolkit:ContextMenu>
                    </toolkit:ContextMenuService.ContextMenu>
                </TextBlock>
            </StackPanel>
        </DataTemplate>
    </phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>

そして私のコードビハインド

private void AddFavorite(object sender, RoutedEventArgs e)
{
    ItemViewModel obj = List.SelectedItem as ItemViewModel;
    if (obj == null) return;
    NavigationService.Navigate(new Uri("/Page.xaml?id=" + obj.Id + "&fav=true", UriKind.Relative));
}
4

1 に答える 1

1

ContextMenu 自体から項目を取得できます。メニューには、バインドされている要素に設定された DataContext があります。DataContext を取得するだけで完了です。

private void AddFavorite(object sender, RoutedEventArgs e)
{
    var element = (FrameworkElement)sender;
    ItemViewModel obj = element.DataContext as ItemViewModel;
    if (obj == null) return;

    NavigationService.Navigate(new Uri("/Page.xaml?id=" + obj.Id + "&fav=true", UriKind.Relative));
}
于 2013-08-05T22:48:08.420 に答える