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 回答