如何在按空格键时获取WPF ItemsControl项以触发命令?

时间:2010-08-09 20:41:23

标签: wpf wpf-controls itemscontrol

我有一个ItemsControl中的超链接列表,我希望用户能够在超链接具有焦点时按空格键来调用超链接的命令(当前按下输入也是这样做 - 但它不是那么可发现的IMO )。这是我的ItemsControl decl:

    <ItemsControl x:Uid="_commandsItemsControl" Name="_commandsItemsControl" Grid.Row="1" Grid.Column="2" Grid.RowSpan="4" ItemsSource="{Binding Commands}" Background="Transparent"
                  ScrollViewer.CanContentScroll="False" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden"
                  HorizontalAlignment="Stretch" HorizontalContentAlignment="Right" VerticalAlignment="Bottom" Margin="12,0,12,0" BorderThickness="0">
        <ItemsControl.ItemTemplate>
            <DataTemplate x:Uid="DataTemplate_1">
                <TextBlock x:Uid="TextBlock_1" HorizontalAlignment="Stretch" TextAlignment="Right">
                    <Hyperlink x:Uid="Hyperlink_1" Command="{Binding Command}">
                        <Hyperlink.Inlines>
                            <Run x:Uid="Run_1" Text="{Binding DisplayName, Mode=OneWay}"/>
                        </Hyperlink.Inlines>
                    </Hyperlink>
                </TextBlock>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

最好的方法是什么?

2 个答案:

答案 0 :(得分:2)

向文本块添加KeyDown事件处理程序。在其中检查按下的键是否为空格,如果是,则执行命令。如果我正确理解您的代码,则textblock的数据上下文包含命令。

答案 1 :(得分:1)

我看到的最简单的方法是构建一个简单的自定义控件,它封装了您想要调用的逻辑。 Enter按钮的功能是超链接的默认命令调用,并且不容易更改它。

只需构建一个继承自TextBlock的自定义控件。它的样式包含带有超链接的文本块。将TemplateBinding用于DisplayName的TextProperty,将TemplateBinding用于自定义控件中的新Command Enpendency属性。还要在自定义控件的公共构造函数中注册预览键向下事件,在其中检查预期的调用键(空格,输入等),如果按下的键符合您的要求,则调用该命令。