私は、Silverlight 3/C#を使用している、と私はいくつかのXAMLは、ユーザーがボタンをクリックに応じて、プログラム的にオブジェクトを作成しようとしています。Silverlightでプログラムでキャンバスを配置するにはどうすればよいですか?
しかし、私は私が作成したCanvas
オブジェクトを配置するように見えることはできません - 私はCanvas.LeftProperty
値を持つ新しいCanvas
にSetValue()
を呼び出すときに、ブラウザウィンドウが空の画面にクリアされます。
私は問題を示す簡単な関数(私は、より複雑な何かで始まっ)持っている: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.Left
とCanvas.Top
プロパティ値を含む必要があります作業。
しかし、私はすべての奇妙行くのブラウザでSLなしのC#から自分自身を値上/左を設定することはできていないようです。
アイデア?
編集:私のアプローチは正しいですが、キャンバスCOORDSは浮動小数点ではなく整数である必要があり - 詳細については、受け入れ答えを参照してください。添付プロパティの