从数据网格 WPF 中的单元格中删除焦点
Remove focus from cell in datagrid WPF
我有简单的数据网格
MySqlCommand cmd = m.getmodel(stmt);
MySqlDataAdapter dataAdapter = new MySqlDataAdapter(cmd);
DataTable data = new DataTable(equip);
dataAdapter.Fill(data);
var checkBoxColumn = new DataColumn("Select", typeof(bool));
data.Columns.Add(checkBoxColumn);
checkBoxColumn.SetOrdinal(0); // Move column to the beginning
foreach (DataRow row in data.Rows)
{
row["Select"] = false;
}
//to make all data uneditable except first
foreach (DataColumn col in data.Columns)
{
if (col.ColumnName == "Select")
col.ReadOnly = false;
else
col.ReadOnly = true;
}
data2.ItemsSource = data.DefaultView;
checkBoxColumn.ReadOnly = false;
data.RowChanged += ChangeEvent_RowChanged_wh;
这是我的更改事件
void ChangeEvent_RowChanged_wh(object sender, System.Data.DataRowChangeEventArgs e)
{
//wh is a global arraylist
var imei = e.Row["imei"];
if (Convert.ToBoolean(e.Row["Select"]))
{
wh.Add(imei);
}
else
{
wh.Remove(imei);
}
int cr_c = wh.Count;
wh_cr_bd.Badge = cr_c;
lose_focus();
}
现在看那张照片
这个向下的徽章与上面提到的选择数量相关联
现在它显示我只检查了 3 个,但实际上我只检查了 2 个,我通过在他的程序外单击来修复它,但这不是有效的,特别是对于消费者来说,任何人都知道我会失去对所有人的关注没有点击外部的数据网格?我试过了:
datagrid.Focus();
datagrid.UnselectAll();
但没有希望
你可以试试 Keyboard.ClearFocus method。请记住,如果您将 Bindings
与 UpdateSourceTrigger=LostFocus
一起使用,它可能不会更新它们。 (但这似乎不是你的情况)
不行的话还有更高级的classFocusManager。 FocusManager.SetFocusedElement
允许您将焦点设置到任何其他可聚焦元素。它实际上就像在外面点击一样。
我有简单的数据网格
MySqlCommand cmd = m.getmodel(stmt);
MySqlDataAdapter dataAdapter = new MySqlDataAdapter(cmd);
DataTable data = new DataTable(equip);
dataAdapter.Fill(data);
var checkBoxColumn = new DataColumn("Select", typeof(bool));
data.Columns.Add(checkBoxColumn);
checkBoxColumn.SetOrdinal(0); // Move column to the beginning
foreach (DataRow row in data.Rows)
{
row["Select"] = false;
}
//to make all data uneditable except first
foreach (DataColumn col in data.Columns)
{
if (col.ColumnName == "Select")
col.ReadOnly = false;
else
col.ReadOnly = true;
}
data2.ItemsSource = data.DefaultView;
checkBoxColumn.ReadOnly = false;
data.RowChanged += ChangeEvent_RowChanged_wh;
这是我的更改事件
void ChangeEvent_RowChanged_wh(object sender, System.Data.DataRowChangeEventArgs e)
{
//wh is a global arraylist
var imei = e.Row["imei"];
if (Convert.ToBoolean(e.Row["Select"]))
{
wh.Add(imei);
}
else
{
wh.Remove(imei);
}
int cr_c = wh.Count;
wh_cr_bd.Badge = cr_c;
lose_focus();
}
现在看那张照片
这个向下的徽章与上面提到的选择数量相关联
现在它显示我只检查了 3 个,但实际上我只检查了 2 个,我通过在他的程序外单击来修复它,但这不是有效的,特别是对于消费者来说,任何人都知道我会失去对所有人的关注没有点击外部的数据网格?我试过了:
datagrid.Focus();
datagrid.UnselectAll();
但没有希望
你可以试试 Keyboard.ClearFocus method。请记住,如果您将 Bindings
与 UpdateSourceTrigger=LostFocus
一起使用,它可能不会更新它们。 (但这似乎不是你的情况)
不行的话还有更高级的classFocusManager。 FocusManager.SetFocusedElement
允许您将焦点设置到任何其他可聚焦元素。它实际上就像在外面点击一样。