我有一个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>
最好的方法是什么?
答案 0 :(得分:2)
向文本块添加KeyDown事件处理程序。在其中检查按下的键是否为空格,如果是,则执行命令。如果我正确理解您的代码,则textblock的数据上下文包含命令。
答案 1 :(得分:1)
我看到的最简单的方法是构建一个简单的自定义控件,它封装了您想要调用的逻辑。 Enter按钮的功能是超链接的默认命令调用,并且不容易更改它。
只需构建一个继承自TextBlock的自定义控件。它的样式包含带有超链接的文本块。将TemplateBinding用于DisplayName的TextProperty,将TemplateBinding用于自定义控件中的新Command Enpendency属性。还要在自定义控件的公共构造函数中注册预览键向下事件,在其中检查预期的调用键(空格,输入等),如果按下的键符合您的要求,则调用该命令。
扬