的默認行爲是使用CTRL +單擊取消DataGrid中的項目WPF的Datagrid - 取消選擇的項目(S)在DataGrid點擊空格時
我希望能夠以鼠標點擊(向左或向右按鈕)網格中的空白並使其取消選擇任何選定的項目。
我是一派死刑,並發現了一些令人難以置信的複雜的解決方法,但我希望有一個簡單的解決方案。
編輯:
現在,我使用列表視圖來代替,仍然還沒有找到一個解決方案。儘管它們的風格比較好,但它與列表視圖相比稍微不討厭。
的默認行爲是使用CTRL +單擊取消DataGrid中的項目WPF的Datagrid - 取消選擇的項目(S)在DataGrid點擊空格時
我希望能夠以鼠標點擊(向左或向右按鈕)網格中的空白並使其取消選擇任何選定的項目。
我是一派死刑,並發現了一些令人難以置信的複雜的解決方法,但我希望有一個簡單的解決方案。
編輯:
現在,我使用列表視圖來代替,仍然還沒有找到一個解決方案。儘管它們的風格比較好,但它與列表視圖相比稍微不討厭。
簡單
<DataGrid MouseDown="DataGrid_MouseDown">
是不是你想要的?
private void DataGrid_MouseDown(object sender, MouseButtonEventArgs e)
{
(sender as DataGrid).SelectedItem = null;
}
唯一的缺點是,在選定項目上單擊沒有CTRL也會取消選擇。
我不知道是否意味着空白或灰色空間。在後一種情況下,作業如下:
private void dataViewImages_MouseUp(object sender, MouseEventArgs e)
{
DataGridView.HitTestInfo hit = dataViewImages.HitTest(e.X, e.Y);
if (hit.Type != DataGridViewHitTestType.Cell)
dataViewImages.ClearSelection();
}
這是我用來通過單擊灰色空間取消選擇所有單元格。
我有同樣的問題,並找到了解決辦法。這應該是建立在行爲:
private void dataGrid1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (sender != null)
{
DataGrid grid = sender as DataGrid;
if (grid != null && grid.SelectedItems != null && grid.SelectedItems.Count == 1)
{
DataGridRow dgr = grid.ItemContainerGenerator.ContainerFromItem(grid.SelectedItem) as DataGridRow;
if (!dgr.IsMouseOver)
{
(dgr as DataGridRow).IsSelected = false;
}
}
}
}
我知道這是歲,但仍然應該不會是「如果(dgr.IsMouseOver)」而不是「如果(!dgr.IsMouseOver)」?它在改變之後爲我工作。 – user2475983
想指出的是,幾年後,一個可以調用grid.CommitEdit()離開當前正在編輯的單元格(如果有的話)之後提交的修改。這在ComboBox單元的情況下尤其有用。 –
我發現這個解決方案很有用,儘管它已經過了幾年。我想指出'if(){...}'語句可以簡化爲'dgr.IsSelected = dgr.IsMouseOver;',因爲檢查和賦值都是'bool'類型。 – Anders
private void dg_IsKeyboardFocusWithinChanged
(object sender, DependencyPropertyChangedEventArgs e)
{
if (dg.SelectedItem != null) {
dg.UnselectAll();
}
}
如果你有SelectionUnit="FullRow"
你必須使用UnselectAllCells()
代替UnselectAll()
。
你的回答是的WinForms,問題是關於WPF。 –
Matthew說,你的回答對於這個問題並不好,但是你幫助我解決了WinForms中的同樣的問題。那謝謝啦! – leetNightshade