2011-10-04 97 views
2
  <ListView SelectionChanged="RecordSelected" Height="134" HorizontalAlignment="Left" Margin="10,10,0,0" Name="processList" VerticalAlignment="Top" Width="207"> 
       <ListView.ItemTemplate> 
        <DataTemplate x:Name="record" DataType="{x:Type local:MyApp}"> 
         <StackPanel Name="cell" Orientation="Vertical" KeyUp="cell_KeyUp"> 
          <StackPanel KeyUp="cell_KeyUp" GotFocus="RecordSelected" KeyDown="RecordSelected" MouseDown="RecordSelected" Orientation="Horizontal" Tag="{Binding MyApp}"> 
           <CheckBox BorderThickness="1" IsChecked="{Binding IsChecked}" Margin="3,3,3,3" Name="checkbox" /> 
           <TextBlock GotFocus="RecordSelected" HorizontalAlignment="Left" KeyDown="RecordSelected" Margin="3,0,0,3" Name="displayname" Text="{Binding DisplayName}" VerticalAlignment="Center" Width="200" /> 
          </StackPanel> 
         </StackPanel> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 

我在datatemplate内的两个堆栈面板上都添加了一个KeyUp事件,但它不会触发。wpf listbox datatemplate中的键盘事件

回答

3

KeyUp事件将不会触发,因为它是ListViewItem有重点。订阅KeyUp事件在ItemContainerStyle代替

<ListView ...> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <EventSetter Event="KeyUp" Handler="cell_KeyUp"/> 
     </Style> 
    </ListView.ItemContainerStyle> 
    <ListView.ItemTemplate> 
     <!-- ... --> 
    </ListView.ItemTemplate> 
</ListView> 

在事件处理中的发件人将成为焦点ListViewItem。将Content投射到您的信号源并切换到IsChecked。如果您的源类实现INotifyPropertyChanged,这将起作用。否则,您可以搜索视觉树找到ListViewItem的子CheckBox

+0

它的工作。大。谢谢 – gangt

0

使用PreviewKeyUp事件。这总是引发火灾。

您可能还想尝试PreviewKeyDown。

+0

它没有工作。我想在用户点击空格键时选中/取消选中复选框。 – gangt

+0

人。是否有任何关键事件触发了它?这可能是一个焦点问题。 – Yatrix

+0

我刚刚检查并且我的PreviewKeyUp正在发射。我想看看它是否有重点,因为我认为如果有的话它应该被解雇。 – Yatrix