UIElement 不能在不同的名称空间内更改

Posted

技术标签:

【中文标题】UIElement 不能在不同的名称空间内更改【英文标题】:UIElement can't be changed inside different name space 【发布时间】:2019-10-01 04:50:57 【问题描述】:

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

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

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

编辑结束

我有一个委托在方法中调用一个类。代理正在检测Rectangle(Here is how it's done) 上的鼠标按下事件。在我尝试在Rectangle 上添加SetLeft 的方法中,我刚刚添加到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_Class 是怎样的,因为 THAT 应该与 UIElement 兼容(根据您的代码所示)。 请注意,在给局部变量赋值之前,直接用默认值初始化它是没有用的。写Point Pos = System.Windows.Input.Mouse.GetPosition(MainWind.Main_Canvas); 忘记在 Gate_Class 类中添加获取矩形的方法了。我是个白痴,忘记了简单的集合,并试图让它变得更复杂抱歉。 【参考方案1】:

Gate_Class 显然不是UIElement。它应该有一个Rectangle 属性,该属性返回您传递给其构造函数的Rectangle。然后可以设置RectangleCanvas.Left属性:

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; 

【讨论】:

是的,我忘了在末尾添加 .rectangle。谢谢!【参考方案2】:

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

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

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

【讨论】:

以上是关于UIElement 不能在不同的名称空间内更改的主要内容,如果未能解决你的问题,请参考以下文章

C 语言的命名空间

名称空间

文件夹批量改名?

Python—函数的名称空间

函数重载细说

函数2