wpf listbox datatemplate中的keyup事件

时间:2011-10-04 20:56:12

标签: wpf

            <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事件,但它不会触发。

2 个答案:

答案 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。