0
我有一個DataGrid,當用戶點擊向下箭頭時,它需要移動到下面的下一行,但重點放在有文本框的單元格中。我不想關注文本框不是實際的單元格。這就是我的DataGrid的外觀。WPF DataGrid將行選擇更改爲單元格的文本框
<DataGrid Name="myDataGrid" PreviewKeyDown="myDataGrid_PreviewKeyDown">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Description" IsReadOnly="True" Width="Auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock HorizontalAlignment="Right" Text="{Binding Path=Descrip, Mode=TwoWay, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged, StringFormat=C, ConverterCulture=en-us}" TextAlignment="Right"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Units Counted" Width="Auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox BorderBrush="Black" BorderThickness="2" FontWeight="Bold" Margin="2" Text="{Binding Path=UnitCounted, Mode=TwoWay, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}" TextAlignment="Right" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
private void myDataGrid_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Down)
{
e.Handled = true;
int indx = myDataGrid.SelectedIndex + 1;
myDataGrid.SelectedIndex = indx;
myDataGrid.CurrentCell = new DataGridCellInfo(myDataGrid.Items[indx], myDataGrid.Columns[1])
}
}
這樣做選擇該小區不是文本框。如果我將它添加到文本框;
FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}"
它爲每行文本框添加一個光標,但不關注文本框。
謝謝
編輯:謝謝@Sheridan我更接近這個代碼;
<TextBox
BorderBrush="Black"
BorderThickness="2"
FontWeight="Bold"
Margin="2"
Text="{Binding Path=UnitCounted, Mode=TwoWay, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}"
TextAlignment="Right"
FocusManager.IsFocusScope="True"
FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}"/>
然後在我的myDataGrid_PreviewKeyDown
將在myDataGrid.BeginEdit()
允許爲它工作。問題是,似乎BeginEdit從來沒有真正結束。我該如何解決?
我建議您閱讀MSDN上的[Focus Overview](http://msdn.microsoft.com/en-us/library/aa969768(v = vs.110).aspx)頁面。 *它將光標添加到每一行文本框,但不會將焦點放在文本框上*設置「FocusManager.FocusedElement」屬性將*邏輯焦點*設置爲其焦點範圍內的一個元素* ......所以它們*專注,但只是*在他們的焦點範圍內*。請閱讀鏈接頁面,瞭解如何管理您的重點需求。 – Sheridan
請參閱上面的修改 – Xaphann