private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            myGrid.SizeChanged += MyGrid_SizeChanged;
            myGrid.Children.Clear();
            _host = new LUTHost();
            _host.PointSelectedEvent       += _host_PointSelectedEvent;
            _host.PointMovedEvent          += _host_PointMovedEvent;
            _host.PointReleasedEvent       += _host_PointReleasedEvent;
            _host.PointCreateOrDeleteEvent += _host_PointCreateOrDeleteEvent;


            myGrid.Children.Add(_host);

            //needed for some reasons...
            _host.InvalidateArrange();
            _host.UpdateLayout();

            DrawPoints();
            LUTChangedEvent?.Invoke();
        }
        private void _host_PointCreateOrDeleteEvent(double x, double y)
        {
            int hit = checkForPoint(x, y);

            if (hit > 0 && hit < _controlPoints.Count - 1)
            {
                _controlPoints.RemoveAt(hit);
                _selectedPoint = -1;
                _needsSolve    = true;
                //Console.WriteLine("Removed point");
                DrawPoints();
                LUTChangedEvent?.Invoke();
            }
            //else
            //{
            //    if (x > 0 && x < 1 && y >= 0 && y <= 1)
            //    {
            //        _controlPoints.Add(x, y);
            //        Console.WriteLine("Added point");
            //        _host.DrawPoints(_controlPoints);
            //    }
            //}
        }
        private void myGrid_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (e.ChangedButton == MouseButton.Right && e.ButtonState == MouseButtonState.Pressed)
            {
                // Retreive the coordinates of the mouse button event.
                Point  pt   = e.GetPosition((UIElement)_host);
                double posX = pt.X / _host.ActualWidth;
                double posY = (_host.ActualHeight - pt.Y) / _host.ActualHeight;
                int    hit  = checkForPoint(posX, posY);

                if (posX > 0 && posX < 1 && posY >= 0 && posY <= 1)
                {
                    if (_controlPoints.ContainsKey(posX))
                    {
                        return;
                    }
                    _controlPoints.Add(posX, posY);
                    _needsSolve = true;
                    //Console.WriteLine("Added point");
                    DrawPoints();
                    LUTChangedEvent?.Invoke();
                }
            }
        }
 private void _host_PointReleasedEvent()
 {
     //Console.WriteLine("RELEASE!");
     _selectedPoint = -1;
     LUTChangedEvent?.Invoke();
 }