使用Shift键多选复选框(在2点/矩形内查找控件)

时间:2013-10-15 00:08:16

标签: wpf c#-4.0 checkbox multi-select

使用Shift键在Wrap面板中选择多个复选框。

在Shift Keydown上捕获鼠标按下事件位置,在第二次按下shift键时,获取选择的2个位置,然后选择选中区域中的复选框控件。

如何在2个位置(System.Window.Point)或System.Windows.rect中找到控件。以下代码选择了wrappanel(lesscolorpanel)中的所有复选框。

 private System.Windows.Point startPoint;
    System.Windows.Point checkpPoint;
    private System.Windows.Point PointWhereMouseIs;
    private void LessColourPanel_OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
        {
            if (startPoint == checkpPoint)
            {
                //GET THE MOUSE POSITION
                startPoint = Mouse.GetPosition(lessColourPanel);
                PointWhereMouseIs = checkpPoint;
            }
            else if(PointWhereMouseIs==checkpPoint)
            {
                //CAPTURE END MOUSE POSITION 
                PointWhereMouseIs = Mouse.GetPosition(lessColourPanel);
                //FIND CONTROLS WIHIN RECTANGLE
                Rect selareaRect = new Rect(startPoint, PointWhereMouseIs);
                foreach (System.Windows.Controls.CheckBox chkitemBox in FindVisualChildren<System.Windows.Controls.CheckBox>(lessColourPanel))
                {
                    var rectBounds = VisualTreeHelper.GetDescendantBounds(chkitemBox);
                    Vector vector = VisualTreeHelper.GetOffset(chkitemBox);
                    rectBounds.Offset(vector);
                    if (rectBounds.IntersectsWith(selareaRect))
                    {
                        chkitemBox.IsChecked = true;
                    }
                }
                startPoint = checkpPoint;
            }

        }
    }

1 个答案:

答案 0 :(得分:0)

知道了,观众可以参考Ashley Davis post

归功于Ashley Davis。