<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内的stackpanels上添加了一个KeyUp事件,但它不会触发。
答案 0 :(得分:4)
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
,这将有效。否则,您可以搜索可视树以查找CheckBox
ListViewItem
答案 1 :(得分:0)
使用PreviewKeyUp事件。总是火上浇油。
您可能还想尝试PreviewKeyDown。