我有一个NA
几乎没有控件。其中一个是Window
。我想实现一些非默认的焦点遍历。即:
DataGrid
是一个整体,而不是每一行。DataGrid
时,用户可以使用向上和向下键遍历行。DataGrid
类型。当用户点击Space或Enter键时,它会执行超链接。目前我有以下代码:
DataGridHyperlinkColumn
不幸的是,它没有达到我的期望。 请你解释一下如何实现这个目标?
答案 0 :(得分:3)
所以,我给你的建议是:
<DataGrid x:Name="DocumentTemplatesGrid"
Grid.Row="2"
ItemsSource="{Binding Items}"
IsReadOnly="True"
AutoGenerateColumns="False"
SelectionMode="Single"
SelectionUnit="FullRow"
TabIndex="1"
IsTabStop="True"
PreviewKeyDown="DocumentTemplatesGrid_PreviewKeyDown">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="IsTabStop" Value="False"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
</Style>
</DataGrid.CellStyle>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="IsTabStop" Value="False"/>
</Style>
</DataGrid.RowStyle>
我在DataGrid上添加了PreviewKeyDown事件,并且已从每个单元格中删除了单元格选择。结果,看起来选择只在行上。
在后面的代码中,这是用Space / Enter打开链接:
private void DocumentTemplatesGrid_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == System.Windows.Input.Key.Space || e.Key == System.Windows.Input.Key.Enter)
{
if (e.Source is DataGrid)
{
string navigationUri = ((e.Source as DataGrid).SelectedItem as Class).Name;
Process.Start(navigationUri);
}
e.Handled = true;
}
}
希望这是你正在寻找的,或者至少是一些帮助。