コード例 #1
0
ファイル: CellLink.cs プロジェクト: whhub/CSharp
        private void CellOnClicked(object sender, ClickStatusEventArgs clickStatusEventArgs)
        {
            var isLeftMouseButtonClicked  = clickStatusEventArgs.IsLeftMouseButtonClicked;
            var isRightMouseButtonClicked = clickStatusEventArgs.IsRightMouseButtonClicked;
            var isCtrlPressed             = clickStatusEventArgs.IsCtrlPressed;
            var isShiftPressed            = clickStatusEventArgs.IsShiftPressed;

            var operationCell = sender as CellBase;

            Debug.Assert(operationCell != null);

            //0. 焦点
            var operationCellIndex = IndexOf(operationCell);
            var lastFocus          = Focus;

            //1. 仅仅右键按下
            if (isRightMouseButtonClicked && !isLeftMouseButtonClicked)
            {
                if (isCtrlPressed && !isShiftPressed)
                {
                    return;                                     //仅仅ctrl按下, 不改变选中状态
                }
                if (operationCell.IsSelected)
                {
                    return;                                         //作用在选中的cell上,不改变选中状态
                }
                //operationCell未选中                               //作用在未选中的cell上,仅仅选中该cell
                SelectOnly(operationCell);
                return;
            }

            //2. 有左键按下


            //2.1 ctrl+shift按下
            if (isShiftPressed && isCtrlPressed)
            {
                //todo: 扩展到Card范围
                var lastFocusCell = this.ElementAtOrDefault(lastFocus);
                SelectRange(lastFocus, operationCellIndex, lastFocusCell != null && lastFocusCell.IsSelected);
            }
            //2.2 仅仅 ctrl 按下
            else if (isShiftPressed)
            {
                ForEach(cell => cell.IsSelected = false);
                SelectRange(lastFocus, operationCellIndex, true);
            }
            //2.3 仅仅 ctrl 按下
            else if (isCtrlPressed)
            {
                operationCell.IsSelected = !operationCell.IsSelected;
                Focus = operationCellIndex;
            }
            //2.4 没有modifier key 按下
            else
            {
                SelectOnly(operationCell);
            }
        }
コード例 #2
0
 private void ElementOnClicked(object sender, ClickStatusEventArgs clickStatusEventArgs)
 {
     ClickOn(sender as T, clickStatusEventArgs.ClickStatus);
 }