如何调整包含矩形的数据模板的大小?

时间:2017-02-24 08:04:56

标签: wpf canvas datatemplate itemscontrol

主要思想是我想使用鼠标事件(鼠标按下/移动/向上)在画布上绘制一些矩形并将它们放入集合中。选中一个复选框后,矩形模板将被更改,并且可以移动或调整它们的大小。

我查看了在codeProject Code Project上发布的上一个项目。如果我从XAML创建对象而不是代码,那么代码对我有用。

这就是XAML到目前为止的表现:

public class Move : Thumb
{
    public Move()
    {
        DragDelta += new DragDeltaEventHandler(Move_DragDelta);
    }
    MainWindow mw = new MainWindow();
    private void Move_DragDelta(object sender, DragDeltaEventArgs e)
    {
        Control designerItem = DataContext as Control;
        var xx = designerItem;
        if (designerItem != null)
        {
            double left = Canvas.GetLeft(designerItem);
            double top = Canvas.GetTop(designerItem);

            Point rectPos = designerItem.TransformToAncestor(Application.Current.MainWindow).Transform(new Point(0, 0));

            Canvas.SetLeft(designerItem, rectPos.X + e.HorizontalChange);
            Canvas.SetTop(designerItem, rectPos.Y + e.VerticalChange);
        }
    }
}

移动课程:

class Resize : Thumb
{
    public Resize()
    {
        DragDelta += new DragDeltaEventHandler(Resize_DragDelta);
    }

    private void Resize_DragDelta(object sender, DragDeltaEventArgs e)
    {
        Control designerItem = DataContext as Control;

        if (designerItem != null)
        {
            double deltaVertical, deltaHorizontal;

            switch (VerticalAlignment)
            {
                case VerticalAlignment.Bottom:
                    deltaVertical = Math.Min(-e.VerticalChange, designerItem.ActualHeight - designerItem.MinHeight);
                    designerItem.Height -= deltaVertical;
                    break;
                case VerticalAlignment.Top:
                    deltaVertical = Math.Min(e.VerticalChange, designerItem.ActualHeight - designerItem.MinHeight);
                    Canvas.SetTop(designerItem, Canvas.GetTop(designerItem) + deltaVertical);
                    designerItem.Height -= deltaVertical;
                    break;
                default:
                    break;
            }
            switch (HorizontalAlignment)
            {
                case HorizontalAlignment.Left:
                    deltaHorizontal = Math.Min(e.HorizontalChange, designerItem.ActualWidth - designerItem.MinWidth);
                    Canvas.SetLeft(designerItem, Canvas.GetLeft(designerItem) + deltaHorizontal);
                    designerItem.Width -= deltaHorizontal;
                    break;
                case HorizontalAlignment.Right:
                    deltaHorizontal = Math.Min(-e.HorizontalChange, designerItem.ActualWidth - designerItem.MinWidth);
                    designerItem.Width -= deltaHorizontal;
                    break;
                default:
                    break;
            }
        }

        e.Handled = true;
    }

调整课程大小:

session = Session()
session.get(url)
getSoup(session) 

def getSoup(session):
     soup = BeautifulSoup(#sessiondatahere, "html.parser")
     return soup

现在,如果我选中Move和resize复选框,每个矩形都可以移动并获得一个额外的边框来调整大小,但是当我尝试更改它的大小时,它只会改变内容控件的大小,并且矩形移动在其中。

0 个答案:

没有答案