我正在使用 Silverlight 3/C#,并尝试以编程方式创建一些 XAML 对象以响应用户单击按钮。
但是,我似乎无法定位Canvas
我创建的对象 - 当我使用该值调用SetValue()
new时,浏览器窗口将清除为空屏幕。Canvas
Canvas.LeftProperty
我有一个显示问题的简单函数(我从更复杂的东西开始):
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.Windows.RoutedEventArgs e)
{
myPage.Children.Add(MakeNewCanvas());
}
注意:myPage 是在我的应用程序的 MainPage XAML 文件中定义的 Canvas 对象。
我已经在 VS 调试器中跟踪了这一点,SL 应用程序在 Firefox 中执行,每当它执行该SetValue()
行时,浏览器就会变白并开始尝试下载数据(根据状态栏)。在将 XAML 树SetValue()
放入类似以下内容后,我尝试调用:Canvas
myPage.Children.Add(newCanvas);
newCanvas.SetValue(Canvas.LeftProperty, 10);
但这没有什么区别 - 一旦SetValue()
调用,浏览器就会变白。
除了具有依赖属性枚举值的函数之外,该类Canvas
似乎没有直接设置 Left/Top 的方法。SetValue()
还有Canvas.SetLeft()
,Canvas.SetTop()
但我猜他们只是垫片SetValue()
。无论如何,使用它们并没有帮助。
如果我不调用SetValue()
,那么我的画布(以及我添加到其中的子对象)会如您所料出现在 SL 应用程序的左上角。
如果我Canvas
在 Expression Blend 中创建和定位一个对象,那么生成的 XAML 会在其自身上包含Canvas.Left
和Canvas.Top
属性值Canvas
,正如我所期望的那样,所以在我看来,我在 C# 中尝试的应该可以工作。
但是如果浏览器中的 SL 变得很奇怪,我似乎无法自己从 C# 设置左/上值。
有任何想法吗?
编辑:我的方法是正确的,但画布坐标需要是浮点数,而不是整数 - 有关详细信息,请参阅接受的答案。