我正在使用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