示例#1
0
 private void DeselectAll()
 {
     if (SelectedVisuals == null || SelectedVisuals.Count < 1)
     {
         return;
     }
     for (int i = SelectedVisuals.Count - 1; i >= 0; i--)
     {
         Visuals[i].IsSelected = false;
     }
     SelectedVisuals.Clear();
 }
        private void OnRendering(Object sender, EventArgs e)
        {
            _sbSelected.Clear();
            _isChanged = false;

            var element = _viewHost.View;

            //MeasureContext.ViewState = _viewHost;
            var size = new ValueRenderSize(_viewHost.RenderMargin.Width,
                                           _viewHost.RenderMargin.Height);

            var measured = MeasureContext.MeasureMainView(element, size,
                                                          _viewHost);
            var selectedVisual = SelectedVisuals?.FirstOrDefault();

            if (selectedVisual == null)
            {
                return;
            }

            _sbSelected.AppendLine(element.ToString());
            _sbSelected.AppendLine("Measured: " + measured);
            _sbSelected.AppendLine("Arranged: " + selectedVisual.Position);

            var nonDefaults = GetNonDefaultSetters(element).ToArray();

            foreach (var kvp in nonDefaults)
            {
                _sbSelected.AppendLine(kvp.ToString());
            }
            //_sbSelected.AppendLine(kvp.Key + ": " + kvp.Value);


            _rightRectangle = new Rectangle(_viewHost.AvailableSize.Width -
                                            _viewHost.RenderMargin.Right,
                                            0, _viewHost.RenderMargin.Width, _viewHost.AvailableSize.Height);
            //RenderContext.ViewState = _viewHost;
            RenderContext.FillRectangle(_rightRectangle, SolidColorBrush.DarkGray);

            if (selectedVisual.Element == null)
            {
                return;
            }


            RenderContext.DrawString(_sbSelected.ToString(), _font,
                                     _rightRectangle, SolidColorBrush.White);
        }
        private void Thumb_DragCompleted(object sender, DragCompletedEventArgs e)
        {
            var thumb = e.OriginalSource as Thumb;

            if (thumb == _thumbs[8])
            {
                Vector delta = Func.VectorRotate(-SelectedVisuals.RefAngle, MoveOffset.X / Scale, MoveOffset.Y / Scale);
                SelectedVisuals.Move(delta);
                SetTransformOperator();
            }

            MoveOffset          = new Point(0, 0);
            BoundsRect          = Rect.Empty;
            AccentPen.Thickness = 0;

            e.Handled = true;
        }
        private void Thumb_DragDelta(object sender, DragDeltaEventArgs e)
        {
            var thumb = e.OriginalSource as Thumb;

            if (thumb == _thumbs[8])
            {
                MoveOffset = new Point(e.HorizontalChange, e.VerticalChange);
            }
            else if (thumb == _thumbs[9])
            {
                Point  cp    = new Point(Width / 2, Height / 2);
                Point  rp    = new Point(Width / 2, BarLength);
                double l     = Height / 2 - BarLength;
                double s     = e.HorizontalChange;
                double delta = Math.Atan2(e.HorizontalChange, Height / 2 - BarLength) / Math.PI * 180;
                SelectedVisuals.Rotate(delta);
                SetTransformOperator();
            }
            else
            {
                FrameworkElement element = thumb as FrameworkElement;

                Point refer = SelectedVisuals.RefRect.Location;
                //Point refer = RegionRect.Location;

                double dx, dy;

                switch (element.HorizontalAlignment)
                {
                case HorizontalAlignment.Left:
                    dx = -e.HorizontalChange;
                    //refer.X += RegionRect.Width;
                    refer.X += SelectedVisuals.RefRect.Width;
                    break;

                case HorizontalAlignment.Right:
                    dx = e.HorizontalChange;
                    break;

                default:
                    dx = 0;
                    break;
                }
                switch (element.VerticalAlignment)
                {
                case VerticalAlignment.Top:
                    dy = -e.VerticalChange;
                    //refer.Y += RegionRect.Height;
                    refer.Y += SelectedVisuals.RefRect.Height;
                    break;

                case VerticalAlignment.Bottom:
                    dy = e.VerticalChange;
                    break;

                default:
                    dy = 0;
                    break;
                }

                //refer = Watermark.Transform.Inverse.Transform(refer);
                //refer = new RotateTransform(SelectedVisuals.RefAngle).Transform(refer);

                double factorX = Width + dx <= 0 ? 0 : dx / Width;
                double factorY = Height + dy <= 0 ? 0 : dy / Height;

                //factorX = 1;

                SelectedVisuals.Resize(factorX, factorY, refer);
                SetTransformOperator();
            }
            e.Handled = true;
        }