我正在使用Silverlight 3/C#,并试图以编程方式创建一些XAML对象,以响应用户单击按钮。如何以编程方式在Silverlight中定位画布?
不过,我似乎无法定位,我创建了一个Canvas
对象 - 当我打电话SetValue()
对新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());
}
NB :myPage是在我的应用程序的MainPage XAML文件中定义的Canvas对象。
我已经通过在VS调试器在Firefox执行SL应用程序跟踪这一点,一旦它执行SetValue()
线,浏览器变成了白色,并开始尝试下载数据(根据状态栏)。我打过电话SetValue()
我已经把后Canvas
在XAML树是这样的:
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变得奇怪。
任何想法?
编辑:我的方法是正确的,但画布坐标需要浮点,而不是整数 - 请参阅接受的答案以了解详细信息。
+1好抓,很好看 – AnthonyWJones 2009-11-08 21:37:53