0

Windows Phoneのリストボックスには、このチュートリアル (オプション2)を使用して、各項目のチェックボックスを追加しました。リストボックスのSelectionChangedイベントが発生する前。ユーザーがチェックボックスをオンにしたときにイベントが発生しないようにするにはどうすればよいですか?SelectionChangedイベントは、チェックボックスではなく、リストボックスのテキストボックスにヒットしたときにのみ発生するはずです。

それが私のリストボックスです:

                <ListBox x:Name="toDoItemsListBox" ItemsSource="{Binding Source={StaticResource cvs}}" Grid.Row="1" Margin="12, 0, 12, 0" Width="440" SelectionChanged="goToNavigation" IsSynchronizedWithCurrentItem="False">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal" >
                            <CheckBox IsChecked="{Binding IsFavorite}" Height="48" Width="48" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked" Style="{StaticResource CheckBoxStyle1}"/>
                            <StackPanel Orientation="Vertical">
                                <TextBlock Text="{Binding Shortcut}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" />
                                <TextBlock Text="{Binding BuildingName}" TextWrapping="Wrap" Style="{StaticResource PhoneTextSubtleStyle}" />
                            </StackPanel>
                        </StackPanel>
                    </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

これらは私のチェックイベントです:

        private void CheckBox_Checked(object sender, RoutedEventArgs e)
    {
        ListBoxItem checedItem = this.toDoItemsListBox.ItemContainerGenerator.ContainerFromItem((sender as CheckBox).DataContext) as ListBoxItem;
        if (checedItem != null)
        {
            checedItem.IsSelected = true;
        }
    }

    private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
    {
        ListBoxItem checedItem = this.toDoItemsListBox.ItemContainerGenerator.ContainerFromItem((sender as CheckBox).DataContext) as ListBoxItem;
        if (checedItem != null)
        {
            checedItem.IsSelected = false;
        }
    }

また、チェックボックスをオンにした場合にのみ、selectionChangedイベントが発生することにも言及する必要があります。チェックを外したときではありません。

4

1 に答える 1

0

選択変更イベントなしで動作させました。別の方法として、タップイベントを使用しました。

                           <StackPanel Orientation="Vertical" Tap="StackPanel_Tap">
                                <TextBlock Text="{Binding Shortcut}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" />
                                <TextBlock Text="{Binding BuildingName}" TextWrapping="Wrap" Style="{StaticResource PhoneTextSubtleStyle}" />
                            </StackPanel>

そして、コードビハインドでは、リストアイテムを次のように取得します。

        private void StackPanel_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        // Save current POI.
        Object object = (sender as StackPanel).DataContext as Object;
     ...}
于 2013-02-03T20:00:05.477 に答える