2009-11-08 12 views
6

私は、Silverlight 3/C#を使用している、と私はいくつかのXAMLは、ユーザーがボタンをクリックに応じて、プログラム的にオブジェクトを作成しようとしています。Silverlightでプログラムでキャンバスを配置するにはどうすればよいですか?

しかし、私は私が作成したCanvasオブジェクトを配置するように見えることはできません - 私はCanvas.LeftProperty値を持つ新しいCanvasSetValue()を呼び出すときに、ブラウザウィンドウが空の画面にクリアされます。

私は問題を示す簡単な関数(私は、より複雑な何かで始まっ)持っている:NB

private void MyButton_Click(object sender, System.Windows.RoutedEventArgs e) 
    { 
     myPage.Children.Add(MakeNewCanvas()); 
    } 

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

、これを呼び出す簡単なボタンクリックハンドラを:myPageは、アプリケーションのMainPage XAMLファイルで定義されているCanvasオブジェクトです。

FirefoxでSLアプリケーションを実行してVSデバッガでこれをトレースしていて、SetValue()行が実行されるたびに、ブラウザが白くなり、ステータスバーに応じてデータをダウンロードしようとします。 - とすぐSetValue()コールがヒットしたとして、ブラウザは白になり

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

が、それは違いはありません:私は、私のようなものでXAMLツリーにCanvasを入れてきた後SetValue()を呼び出してみました。

Canvasクラスは、依存プロパティの列挙値を持つSetValue()関数以外に、Left/Topを直接設定する方法がないようです。そこにもCanvas.SetLeft()Canvas.SetTop()だが、私は、彼らはただSetValue()上にシムを推測します。とにかくそれらを使っても助けにならなかった。

SetValue()を呼び出さないと、私のキャンバスがSLアプリケーションの左上に表示されます(これは私が追加した子オブジェクトです)。

私が作成およびExpression BlendでCanvasオブジェクトを配置し、XAMLが生成された場合、私がC#でしようとしているものをと私には思われるので、私が期待するよう、Canvas自体にCanvas.LeftCanvas.Topプロパティ値を含む必要があります作業。

しかし、私はすべての奇妙行くのブラウザでSLなしのC#から自分自身を値上/左を設定することはできていないようです。

アイデア?

編集:私のアプローチは正しいですが、キャンバスCOORDSは浮動小数点ではなく整数である必要があり - 詳細については、受け入れ答えを参照してください。添付プロパティの

答えて

関連する問題