c# – 如何在Silverlight中以编程方式定位画布?

c# – 如何在Silverlight中以编程方式定位画布?,第1张

概述我正在使用Silverlight 3 / C#,我正在尝试以编程方式创建一些XAML对象以响应用户单击按钮. 但是,我似乎无法定位我创建的Canvas对象 – 当我使用Canvas.LeftProperty值在新Canvas上调用SetValue()时,浏览器窗口将清除为空屏幕. 我有一个简单的函数来展示问题(我开始使用更复杂的东西): private Canvas MakeNewCanvas() 我正在使用Silverlight 3 / C#,我正在尝试以编程方式创建一些XAML对象以响应用户单击按钮.

但是,我似乎无法定位我创建的Canvas对象 – 当我使用Canvas.leftProperty值在新Canvas上调用SetValue()时,浏览器窗口将清除为空屏幕.

我有一个简单的函数来展示问题(我开始使用更复杂的东西):

private Canvas MakeNewCanvas()    {        Canvas newCanvas = new Canvas();        newCanvas.WIDth = newCanvas.Height = 50;        newCanvas.SetValue(Canvas.leftProperty,10);        return newCanvas;    }

和一个简单的按钮单击处理程序,它调用:

private voID Mybutton_Click(object sender,System.@R_502_5087@.RoutedEventArgs e)    {        myPage.Children.Add(MakeNewCanvas());    }

注意:myPage是我的应用程序的MainPage XAML文件中定义的Canvas对象.

我已经在VS调试器中跟踪了这一点,并且在firefox中执行了SL应用程序,每当它执行SetValue()行时,浏览器变为白色并开始尝试下载数据(根据状态栏).在我将Canvas放入XAML树之后,我尝试调用SetValue(),例如:

myPage.Children.Add(newCanvas);    newCanvas.SetValue(Canvas.leftProperty,10);

但它没有区别 – 只要命中SetValue()调用,浏览器就会变白.

除了具有依赖项属性枚举值的SetValue()函数之外,Canvas类似乎没有直接设置left / top的方法.还有Canvas.Setleft()和Canvas.Settop(),但我想它们只是填充到SetValue()上.无论如何,使用它们并没有帮助.

如果我没有调用SetValue(),那么我的画布会在SL应用程序中出现(和我添加到它的子对象),如您所料,在最左上方.

如果我在Expression Blend中创建并定位Canvas对象,那么生成的XAML在Canvas本身中包含Canvas.left和Canvas.top属性值,正如我所料,所以在我看来我在C#中尝试的应该是工作.

但是我似乎无法在C#中设置左/顶值,而浏览器中的SL并不奇怪.

有任何想法吗?

编辑:我的方法是正确的,但画布坐标需要是浮点数,而不是整数 – 请参阅接受的答案了解详情.

解决方法 尝试使用代码,但调试器捕获异常,我得到:

无法在system.int32类型的对象上设置System.Double类型的DependencyProperty.

这是一个非常愚蠢的问题 – SetValue只接受Object,所以你很容易出现这样的问题.

尝试:

newCanvas.SetValue(Canvas.leftProperty,10.0);

要么

Canvas.Setleft(newCanvas,10);

它可能会奏效.

总结

以上是内存溢出为你收集整理的c# – 如何在Silverlight中以编程方式定位画布?全部内容,希望文章能够帮你解决c# – 如何在Silverlight中以编程方式定位画布?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1240998.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存