列表框内的访问控制,而不触发selectionChanged事件

时间:2013-02-03 11:39:07

标签: windows-phone-7 checkbox listbox selectionchanged

对于我在Windows手机中的列表框,我在this tutorial的帮助下为每个项目添加了一个复选框(选项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事件才会引发。不是我取消选中它。

1 个答案:

答案 0 :(得分: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>

在Code背后我得到了我的listitem:

        private void StackPanel_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        // Save current POI.
        Object object = (sender as StackPanel).DataContext as Object;
     ...}