无法在不同名称内更改 UIElement space

UIElement can't be changed inside different name space

编辑:对于 OOP 的新程序员来说,如果语法正在寻找特定的变量类型,则仅调用 class 是不够的,它将引发错误。这就是下面的答案所指出的问题,这行代码:

System.Windows.Controls.Canvas.SetLeft(Gate_list[Gate_list.Count - 1], Pos.X);

它有一个致命的错误,那就是 Canvas.SetLeft 正在寻找一个 canvas 子节点 class(在本例中是一个矩形)和一个点。但是我发送了 Class 类型 Gate_list[Gate_list.Count - 1] 而它应该是 Gate_list[Gate_list.Count - 1].GetRect()

编辑结束

我有一个在方法中调用 class 的委托。委托正在检测 Rectangle() 上的鼠标按下事件。在我尝试 SetLeftRectangle 的方法中,我刚刚添加到 Canvas 但得到错误 CS1503.

我试过将其转换为 System.Windows.UIElement 但系统无法转换。

public partial class Program
{
    public void Rect_Button_MouseDown(MainWindow MainWind, string Tag)
    {
        Point Pos = new Point();
        Pos = System.Windows.Input.Mouse.GetPosition(MainWind.Main_Canvas);
        if (Drag == false)
        {
            Drag = true;
            Gate_list.Add(new Gate_Class(Convert.ToInt32(Tag),new Rectangle()));
            MainWind.Main_Canvas.Children.Add(Gate_list[Gate_list.Count-1].Get_Rect());
            System.Windows.Controls.Canvas.SetLeft(Gate_list[Gate_list.Count - 1], Pos.X);
        }
    }
}

我相信应该有一个客场可以转会system.windows但我不知道

我的问题归结为找到一种将 Gate_list[] 转换为 UIElement 的方法。

我认为您在代码的最后一行提供了 Gate_list[Gate_list.Count - 1] 但这是您的自定义 class 而不是您刚刚创建的 Rectangle。我可以从您的代码中推断出您可以使用 Gate_list[Gate_list.Count - 1].Get_Rect().

获得 Rectangle

换句话说,在我看来,您需要添加 .Get_Rect() 才能实际获得矩形。

如果这不起作用,请提供您的 Gate_Class 代码和您收到的错误消息。

Gate_Class 显然不是 UIElement。它应该有一个 Rectangle 属性 那个 returns 你传递给它的构造函数的 Rectangle 。然后你可以设置 Canvas.Left 属性 的 Rectangle:

System.Windows.Controls.Canvas.SetLeft(Gate_list[Gate_list.Count - 1].Rectangle, Pos.X);

public class Gate_Class
{
    public Gate_Class(int tag, Rectangle rectangle)
    {
        //...
        Rectangle = rectangle;
    }

    public Rectangle Rectangle { get; }
}