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
。然后可以设置Rectangle
的Canvas.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 不能在不同的名称空间内更改的主要内容,如果未能解决你的问题,请参考以下文章