【发布时间】:2010-12-14 09:36:18
【问题描述】:
我正在使用 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.Windows.RoutedEventArgs e)
{
myPage.Children.Add(MakeNewCanvas());
}
注意:myPage 是在我的应用的 MainPage XAML 文件中定义的 Canvas 对象。
我已经在 VS 调试器中跟踪了这一点,SL 应用程序在 Firefox 中执行,每当它执行 SetValue() 行时,浏览器就会变白并开始尝试下载数据(根据状态栏)。在将 Canvas 放入 XAML 树中后,我尝试调用 SetValue(),如下所示:
myPage.Children.Add(newCanvas);
newCanvas.SetValue(Canvas.LeftProperty, 10);
但这没有什么区别 - 只要调用 SetValue(),浏览器就会变白。
Canvas 类似乎没有直接设置 Left/Top 的方法,除了具有依赖属性枚举值的 SetValue() 函数。还有Canvas.SetLeft() 和Canvas.SetTop(),但我猜它们只是SetValue() 上的垫片。无论如何,使用它们并没有帮助。
如果我不调用 SetValue(),那么我的画布(以及我添加到其中的子对象)会如您所料出现在 SL 应用程序的最左上角。
如果我在 Expression Blend 中创建并定位 Canvas 对象,则生成的 XAML 包括 Canvas 本身的 Canvas.Left 和 Canvas.Top 属性值,正如我所期望的那样,所以在我看来,什么我在 C# 中尝试应该可以工作。
但如果浏览器中的 SL 变得很奇怪,我似乎无法自己从 C# 设置左/上值。
有什么想法吗?
编辑:我的方法是正确的,但画布坐标必须是浮点数,而不是整数 - 详情请参阅已接受的答案。
【问题讨论】:
标签: c# silverlight canvas properties position