【问题标题】:Access control inside a listbox without triggering selectionChanged event列表框内的访问控制而不触发 selectionChanged 事件
【发布时间】:2013-02-03 11:39:06
【问题描述】:

对于我在 windows phone 中的列表框,我在 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 事件。当我取消选中它时不会。

【问题讨论】:

    标签: windows-phone-7 checkbox listbox selectionchanged


    【解决方案1】:

    我让它在没有选择更改事件的情况下工作。作为替代,我使用了一个点击事件:

                               <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;
         ...}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多