【问题标题】:Metro App Customised ListView KeyDown event not firingMetro App 自定义 ListView KeyDown 事件未触发
【发布时间】:2013-05-20 20:54:55
【问题描述】:

我有一个带有 ListView 的 Metro 应用程序,它具有以下定义:

<ListView Grid.Row="0" x:Name="lvData" CanDragItems="True" CanReorderItems="True" SelectionMode="Extended">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <Border Padding="4,0,0,0">
                                <Grid Width="{Binding ElementName=lvData, Path=ActualWidth}">
                                    <Grid.RowDefinitions>
                                        <RowDefinition/>
                                        <RowDefinition/>
                                    </Grid.RowDefinitions>

                                    <Grid Grid.Row="0">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="*"/>
                                            <ColumnDefinition Width="Auto"/>
                                            <ColumnDefinition Width="Auto"/>
                                            <ColumnDefinition Width="Auto"/>
                                            <ColumnDefinition Width="Auto"/>
                                            <ColumnDefinition Width="65"/>
                                        </Grid.ColumnDefinitions>

                                        <TextBlock Grid.Column="0" HorizontalAlignment="Stretch"/>

                                        <TextBlock Grid.Column="1" HorizontalAlignment="Right"/>

                                        <TextBlock Grid.Column="2" HorizontalAlignment="Right"/>

                                        <TextBlock Grid.Column="3" HorizontalAlignment="Right"/>

                                        <TextBlock Grid.Column="4" HorizontalAlignment="Right"/>

                                    </Grid>

                                    <Grid Grid.Row="1">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="*"/>
                                            <ColumnDefinition Width="Auto"/>
                                            <ColumnDefinition Width="65"/>
                                        </Grid.ColumnDefinitions>

                                        <TextBlock Grid.Column="0" HorizontalAlignment="Stretch" TextTrimming="WordEllipsis"/>

                                        <TextBlock Grid.Column="1" HorizontalAlignment="Right"/>

                                    </Grid>
                                </Grid>
                            </Border>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>

我尝试在嵌入在此ListView's DataTemplate 中的不同控件上设置KeyDown 事件,但该事件似乎从未触发。

注意:如果我双击ListViewItem,则会触发KeyDown 事件。

有什么建议吗?

【问题讨论】:

    标签: c#-4.0 windows-runtime microsoft-metro winrt-xaml


    【解决方案1】:

    您的控件需要有焦点来处理 KeyDown 事件。如果您需要全局处理它们 - 您可以在 Window.Current.KeyDown 而不是控件上处理它们。

    【讨论】:

    • 按照您的建议,我以编程方式将其聚焦,然后尝试按键以查看是否引发了 KeyDown 事件,但这没有帮助。我需要做什么具体的事情吗?
    • 检查您的Focus() 调用是否真的成功。我认为您需要将 IsTabStop 设置为 true 以使控件具有焦点。
    • 嗨菲利普。那也没有帮助。 DoubleTapped 事件对 Tapped 没有的控件做了什么?因为在 DoubleTapped 上一切正常。
    • 发现了一个一直在窃取焦点的控件,这就是事件没有被触发的原因。谢谢!
    • 具体来说,它是 WebView 控件。解决方法见这篇文章:blog.christopheargento.net/2013/02/07/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多