WPF DataGrid實現單擊單元格直接編輯

某店長發表於2018-12-15

(純新手,第一次用VS,很多不懂,歡迎指點)
目前在做一個PC軟體,需要一個多行多列資料錄入的編輯介面
DataGrid可以繫結資料來源,非常好用,但它有個特性卻很不友好:單擊先選中單元格,再點選才能編輯,無法直接改掉這個設定
折騰了好多天,多虧有位前輩大佬指點意見
原本我的思路是捕獲滑鼠點選時的座標,根據橫座標來讓相應位置的控制元件獲得焦點,但大佬直接給了個更簡單的思路:讓單擊變成雙擊
思路是簡單,但對於我這純粹的新手而言,問題還是有的
問題點一:如何觸發事件
我是從這篇英語博文學習到的:https://stackoverflow.com/questions/28168645/automatic-editing-of-wpf-datagrid-content-when-datagrid-cell-gets-focus

<DataGrid AutoGenerateColumns="False" SelectionUnit="Cell" >
            <DataGrid.CellStyle>
                <Style TargetType="{x:Type DataGridCell}">
                    <EventSetter Event="GotFocus" Handler="myDataGridMain_GotFocus"></EventSetter>
                </Style>
            </DataGrid.CellStyle>

SelectionUnit=“Cell”,作用是讓單擊時選中行,直接變成選中單元格,這一步挺重要的
然後在DataGird下面新增CellStyle,來設定單元格事件

問題點二:如何單擊變雙擊
找了好幾篇其實內容都一樣的文章,最終是在這裡下載的原始碼:https://www.zhaokeli.com/article/8124.html
說實話,整篇程式碼很長,我沒細看,只是拿來就用,但用的時候出現了兩個小問題
我並不確定是因為版本更新導致的,還是原始碼敲的時候就有錯誤,但將就著改了,能用,直接附上我改後的程式碼下載連結:https://download.csdn.net/download/jdjdjdjdjdjd/10852246
沒有幣下載也沒關係,可以下載原始碼,自己修改,問題只有兩處:
一處是有兩個Point應該是System.Windows.Point(反正我改過來後就可用了),但原始碼是Drawing.Point(執行後報錯-名稱空間“System.Drawing”中不存在型別或名稱空間名“Point”);
一處是以下這個方法裡的point.x,point.y,強轉為int(原本是沒有強轉的,執行後會報錯)

public static void MoveTo(System.Windows.Point point)
        {
            SendMouseInput((int)point.X, (int)point.Y, 0, NativeMethods.SendMouseInputFlags.Move | NativeMethods.SendMouseInputFlags.Absolute);
        }

做完以上工作,將程式碼新增到專案後,事件內一句程式碼就搞定了

private void myDataGridMain_GotFocus(object sender, RoutedEventArgs e)
        {
            Demo.Mouse.DoubleClick(MouseButton.Left);
        }

相關文章