Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 旋转和调整对象大小_C#_Wpf - Fatal编程技术网

C# 旋转和调整对象大小

C# 旋转和调整对象大小,c#,wpf,C#,Wpf,我们使用装饰器在画布上拖放、旋转和调整对象大小。这很好,但当在画布上选择所有对象或其子集时,我们尝试旋转它们或调整它们的大小,每个对象运行到不同的方向。专家能否给我们一些线索,看看在哪里可以做什么 我们将不胜感激 谢谢。您可能正在寻找此处建议的边界框解决方案: 装饰选定对象所在的任何曲面,因为这是您选择的范围。手动定位和调整装饰器的大小,而不是使用装饰器的默认行为 您可能正在寻找此处建议的边界框解决方案: 装饰选定对象所在的任何曲面,因为这是您选择的范围。手动定位和调整装饰器的大小,而不是使用装

我们使用装饰器在画布上拖放、旋转和调整对象大小。这很好,但当在画布上选择所有对象或其子集时,我们尝试旋转它们或调整它们的大小,每个对象运行到不同的方向。专家能否给我们一些线索,看看在哪里可以做什么

我们将不胜感激


谢谢。

您可能正在寻找此处建议的边界框解决方案:

装饰选定对象所在的任何曲面,因为这是您选择的范围。手动定位和调整装饰器的大小,而不是使用装饰器的默认行为


您可能正在寻找此处建议的边界框解决方案:

装饰选定对象所在的任何曲面,因为这是您选择的范围。手动定位和调整装饰器的大小,而不是使用装饰器的默认行为


我也有类似的问题。以下是我实现的代码:

void DragThumb_DragDelta(object sender, DragDeltaEventArgs e)
    {
        DesignerItem designerItem = this.DataContext as DesignerItem;
        DesignerCanvas designer = VisualTreeHelper.GetParent(designerItem) as DesignerCanvas;
        if (designerItem != null && designer != null && designerItem.IsSelected)
        {
            double minLeft = double.MaxValue;
            double minTop = double.MaxValue;

            // we only move DesignerItems
            var designerItems = designer.SelectionService.CurrentSelection.OfType<DesignerItem>();

            foreach (DesignerItem item in designerItems)
            {
                double left = Canvas.GetLeft(item);
                double top = Canvas.GetTop(item);

                minLeft = double.IsNaN(left) ? 0 : Math.Min(left, minLeft);
                minTop = double.IsNaN(top) ? 0 : Math.Min(top, minTop);
            }

            double deltaHorizontal = Math.Max(-minLeft, e.HorizontalChange);
            double deltaVertical = Math.Max(-minTop, e.VerticalChange);

            foreach (DesignerItem item in designerItems)
            {
                RotateTransform rotateTransform = designerItem.RenderTransform as RotateTransform;
                double left = Canvas.GetLeft(item);
                double top = Canvas.GetTop(item);

                if (double.IsNaN(left)) left = 0;
                if (double.IsNaN(top)) top = 0;

                if (rotateTransform != null)
                {
                    Point dragDelta = new Point(e.HorizontalChange, e.VerticalChange);
                    dragDelta = rotateTransform.Transform(dragDelta);
                    Canvas.SetLeft(item, left + dragDelta.X);
                    Canvas.SetTop(item, top+ dragDelta.Y);
                }
                else
                {
                    Canvas.SetLeft(item, left + deltaHorizontal);
                    Canvas.SetTop(item, top + deltaVertical);
                }
            }

            designer.InvalidateMeasure();
            e.Handled = true;
        }
    }
void DragThumb_DragDelta(对象发送方,DragDeltaEventArgs e)
{
DesignerItem DesignerItem=this.DataContext作为DesignerItem;
DesignerCanvas designer=VisualTreeHelper.GetParent(designerItem)作为DesignerCanvas;
if(designerItem!=null&&designer!=null&&designerItem.IsSelected)
{
double minLeft=double.MaxValue;
double minTop=double.MaxValue;
//我们只搬家
var designerItems=designer.SelectionService.CurrentSelection.OfType();
foreach(designerItems中的DesignerItem项)
{
左双=Canvas.GetLeft(项目);
double-top=Canvas.GetTop(项目);
minLeft=double.IsNaN(左)?0:Math.Min(左,minLeft);
minTop=double.IsNaN(顶部)?0:Math.Min(顶部,minTop);
}
双deltaHorizontal=数学最大值(-minLeft,e.水平变化);
双三角垂直=数学最大值(-minTop,即垂直变化);
foreach(designerItems中的DesignerItem项)
{
RotateTransform RotateTransform=designerItem.RenderTransform作为RotateTransform;
左双=Canvas.GetLeft(项目);
double-top=Canvas.GetTop(项目);
如果(double.IsNaN(左))left=0;
如果(double.IsNaN(top))top=0;
if(rotateTransform!=null)
{
点dragDelta=新点(如水平变化、垂直变化);
dragDelta=旋转变换.Transform(dragDelta);
Canvas.SetLeft(item,left+dragDelta.X);
Canvas.SetTop(项目,top+dragDelta.Y);
}
其他的
{
Canvas.SetLeft(项目,左侧+水平三角形);
Canvas.SetTop(项目,顶部+三角垂直);
}
}
designer.InvalidateMeasure();
e、 已处理=正确;
}
}

如果您能解决问题,请告诉我。

我也遇到过类似的问题。以下是我实现的代码:

void DragThumb_DragDelta(object sender, DragDeltaEventArgs e)
    {
        DesignerItem designerItem = this.DataContext as DesignerItem;
        DesignerCanvas designer = VisualTreeHelper.GetParent(designerItem) as DesignerCanvas;
        if (designerItem != null && designer != null && designerItem.IsSelected)
        {
            double minLeft = double.MaxValue;
            double minTop = double.MaxValue;

            // we only move DesignerItems
            var designerItems = designer.SelectionService.CurrentSelection.OfType<DesignerItem>();

            foreach (DesignerItem item in designerItems)
            {
                double left = Canvas.GetLeft(item);
                double top = Canvas.GetTop(item);

                minLeft = double.IsNaN(left) ? 0 : Math.Min(left, minLeft);
                minTop = double.IsNaN(top) ? 0 : Math.Min(top, minTop);
            }

            double deltaHorizontal = Math.Max(-minLeft, e.HorizontalChange);
            double deltaVertical = Math.Max(-minTop, e.VerticalChange);

            foreach (DesignerItem item in designerItems)
            {
                RotateTransform rotateTransform = designerItem.RenderTransform as RotateTransform;
                double left = Canvas.GetLeft(item);
                double top = Canvas.GetTop(item);

                if (double.IsNaN(left)) left = 0;
                if (double.IsNaN(top)) top = 0;

                if (rotateTransform != null)
                {
                    Point dragDelta = new Point(e.HorizontalChange, e.VerticalChange);
                    dragDelta = rotateTransform.Transform(dragDelta);
                    Canvas.SetLeft(item, left + dragDelta.X);
                    Canvas.SetTop(item, top+ dragDelta.Y);
                }
                else
                {
                    Canvas.SetLeft(item, left + deltaHorizontal);
                    Canvas.SetTop(item, top + deltaVertical);
                }
            }

            designer.InvalidateMeasure();
            e.Handled = true;
        }
    }
void DragThumb_DragDelta(对象发送方,DragDeltaEventArgs e)
{
DesignerItem DesignerItem=this.DataContext作为DesignerItem;
DesignerCanvas designer=VisualTreeHelper.GetParent(designerItem)作为DesignerCanvas;
if(designerItem!=null&&designer!=null&&designerItem.IsSelected)
{
double minLeft=double.MaxValue;
double minTop=double.MaxValue;
//我们只搬家
var designerItems=designer.SelectionService.CurrentSelection.OfType();
foreach(designerItems中的DesignerItem项)
{
左双=Canvas.GetLeft(项目);
double-top=Canvas.GetTop(项目);
minLeft=double.IsNaN(左)?0:Math.Min(左,minLeft);
minTop=double.IsNaN(顶部)?0:Math.Min(顶部,minTop);
}
双deltaHorizontal=数学最大值(-minLeft,e.水平变化);
双三角垂直=数学最大值(-minTop,即垂直变化);
foreach(designerItems中的DesignerItem项)
{
RotateTransform RotateTransform=designerItem.RenderTransform作为RotateTransform;
左双=Canvas.GetLeft(项目);
double-top=Canvas.GetTop(项目);
如果(double.IsNaN(左))left=0;
如果(double.IsNaN(top))top=0;
if(rotateTransform!=null)
{
点dragDelta=新点(如水平变化、垂直变化);
dragDelta=旋转变换.Transform(dragDelta);
Canvas.SetLeft(item,left+dragDelta.X);
Canvas.SetTop(项目,top+dragDelta.Y);
}
其他的
{
Canvas.SetLeft(项目,左侧+水平三角形);
Canvas.SetTop(项目,顶部+三角垂直);
}
}
designer.InvalidateMeasure();
e、 已处理=正确;
}
}
如果你能解决这个问题,请告诉我