protected void ClickOn(T operationElement, ClickStatus clickStatus) { Debug.Assert(operationElement != null); //0. 焦点 var operationElementIndex = IndexOf(operationElement); var lastFocus = Focus; var lastFocusElement = this.ElementAtOrDefault(lastFocus); //1. 仅仅右键按下 if (clickStatus.IsRightMouseButtonClicked && !clickStatus.IsLeftMouseButtonClicked) { if (clickStatus.IsCtrlPressed && !clickStatus.IsShiftPressed) { return; //仅仅ctrl按下, 不改变选中状态 } if (operationElement.IsSelected) { return; //作用在选中的cell上,不改变选中状态 } //operationCell未选中 //作用在未选中的cell上,仅仅选中该cell SelectOnly(operationElement); return; } //2. 有左键按下 //2.1 ctrl+shift按下 if (clickStatus.IsShiftPressed && clickStatus.IsCtrlPressed) { //todo: 扩展到Card范围 SelectRange(lastFocus, operationElementIndex, lastFocusElement != null && lastFocusElement.IsSelected); } //2.2 仅仅 ctrl 按下 else if (clickStatus.IsShiftPressed) { ForEach(cell => cell.IsSelected = false); SelectRange(lastFocus, operationElementIndex, true); } //2.3 仅仅 ctrl 按下 else if (clickStatus.IsCtrlPressed) { operationElement.IsSelected = !operationElement.IsSelected; Focus = operationElementIndex; } //2.4 没有modifier key 按下 else { SelectOnly(operationElement); } }
public ClickStatusEventArgs(ClickStatus clickStatus) { ClickStatus = clickStatus; }