0
我有一個dataGrid。當任何一行的第一個單元格(它是一個包含文本框的模板列)被關注時,如果用戶沒有輸入任何文本並嘗試移動到另一個單元格或數據網格外的任何控件,則應該強制他輸入數據細胞在失去焦點之前。如果他不想在該單元格中輸入任何數據,那麼他應該按照他的選擇按輸入或Esc。任何人都可以幫助我實現這種行爲嗎?如何強制用戶在DataGridCell中輸入數據
我有一個dataGrid。當任何一行的第一個單元格(它是一個包含文本框的模板列)被關注時,如果用戶沒有輸入任何文本並嘗試移動到另一個單元格或數據網格外的任何控件,則應該強制他輸入數據細胞在失去焦點之前。如果他不想在該單元格中輸入任何數據,那麼他應該按照他的選擇按輸入或Esc。任何人都可以幫助我實現這種行爲嗎?如何強制用戶在DataGridCell中輸入數據
我能想到的兩種方式來實現這一目標:
第一:
您可以使用DataGridTemplateColumn
和模板設置爲Textbox
。此文本框中有一個您可以使用的PreviewLostKeyboardFocus
事件。將Handled
設置爲true可防止Textbox
失去焦點。
例子:
<DataGrid CanUserAddRows="True" ItemsSource="{Binding MyItems}">
<DataGrid.Columns>
<DataGridTemplateColumn Header="header">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding DisplayedName}" PreviewLostKeyboardFocus="OnPreviewLostKeyboardFocus" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
二
您還可以添加一個Style
到DataGrid
。這種風格設置PreviewLostKeyboardFocus
事件的所有單元格:
<DataGrid.Resources>
<Style TargetType="DataGridCell">
<EventSetter Event="PreviewLostKeyboardFocus" Handler="OnPreviewLostKeyboardFocus" />
</Style>
</DataGrid.Resources>
在事件處理程序,你檢查,如果電池是在正確的列,然後設置Handled
爲true:
public void OnPreviewLostKeyboardFocus(object sender, RoutedEventArgs e)
{
if ((sender as DataGridCell).Column.Header.ToString() == "The column I'm looking for")
{
e.Handled = true;
}
}
如果允許用戶按下'enter'或'esc'後留下'textbox'空。你爲什麼要強制用戶按下其中一個鍵? – Shaharyar
@Shaharyar當用戶按下Esc時,我將關閉窗口。如果他按下Enter並且第一個單元格爲空,那麼我將刪除該行。我不喜歡這個設施,但客戶想要它,所以我正在努力做到這一點。 – Vishal