Пример #1
0
        private void Rectangle_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            Rectangle r = (Rectangle)sender;

            r.ReleaseMouseCapture();
            ContentPresenter dobj = (ContentPresenter)itemsControl.ItemContainerGenerator.ContainerFromItem(r.DataContext);
            Point            ct   = new Point((double)dobj.GetValue(Canvas.LeftProperty) + r.Width / 2, (double)dobj.GetValue(Canvas.TopProperty) + r.Height / 2);

            r.IsHitTestVisible = false;
            // TODO: find a better way to do this hit testing
            List <Rectangle> hitTests = new List <Rectangle>();

            hitTests.Add(r);
            Rectangle hit = null;

            while (hit == null)
            {
                IInputElement el = InputHitTest(ct);
                if (!(el is Rectangle))
                {
                    break;
                }
                Rectangle r2 = (Rectangle)el;
                if (r2.DataContext is Item)
                {
                    r2.IsHitTestVisible = false; hitTests.Add(r2); continue;
                }
                hit = r2;
            }
            foreach (Rectangle r3 in hitTests)
            {
                r3.IsHitTestVisible = true;
            }

            Item item     = (Item)r.DataContext;
            int  oldState = item.State;

            if (hit == positiveBlock)
            {
                item.State = 1;
                r.Stroke   = Brushes.LimeGreen;
            }
            if (hit == negativeBlock)
            {
                item.State = -1;
                r.Stroke   = Brushes.Red;
            }
            if (hit == null)
            {
                item.State = 0;
                r.Stroke   = normalStroke;
            }
            if (oldState != item.State)
            {
                // Update classifier
                ItemsModel model = (ItemsModel)DataContext;
                r.Cursor = Cursors.Wait;
                bool isClassifying = model.Reclassify();
                BottomPanel.Visibility = isClassifying? Visibility.Visible : Visibility.Hidden;
                r.Cursor = null;
                foreach (Item it2 in model.Items)
                {
                    if (it2 != item)
                    {
                        StartAnimation(it2);
                    }
                }
            }
            StartAnimation(item);
            dragPoint.X = -1;
        }