2013-02-03 45 views
0

对于我在windows phone中的列表框,我在this tutorial(选项2)的帮助下为每个项目添加了一个复选框。在我的列表框中已经有一个SelectionChanged事件之前。如何防止触发事件,当用户只检查复选框时? 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事件仅提高。不是当我取消选中。

回答

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; 
    ...} 
相关问题