Utilizzo Silverlight 3/C# e sto cercando di creare alcuni oggetti XAML in modo programmatico in risposta a un utente che fa clic su un pulsante.Come posiziono una tela in modo programmatico in Silverlight?
Tuttavia, non riesco a posizionare un oggetto Canvas
che ho creato - quando chiamo SetValue()
sul nuovo Canvas
con il valore Canvas.LeftProperty
, la finestra del browser cancella ad uno schermo vuoto.
ho una semplice funzione che presenta il problema (ho iniziato con qualcosa di più complesso):
private Canvas MakeNewCanvas()
{
Canvas newCanvas = new Canvas();
newCanvas.Width = newCanvas.Height = 50;
newCanvas.SetValue(Canvas.LeftProperty, 10);
return newCanvas;
}
e un gestore di clic semplice pulsante che chiama questo:
private void MyButton_Click(object sender, System.Windows.RoutedEventArgs e)
{
myPage.Children.Add(MakeNewCanvas());
}
NB : myPage è un oggetto Canvas definito nel file XAML MainPage della mia app.
Ho tracciato questo nel debugger VS con l'app SL in esecuzione in Firefox, e ogni volta che si esegue la riga SetValue()
, il browser diventa bianco e inizia a provare a scaricare i dati (in base alla barra di stato). Ho provato a chiamare SetValue()
dopo che ho messo il Canvas
nell'albero XAML con qualcosa di simile:
myPage.Children.Add(newCanvas);
newCanvas.SetValue(Canvas.LeftProperty, 10);
ma non fa alcuna differenza - non appena la chiamata SetValue()
viene colpito, il browser diventa bianco.
La classe Canvas
sembra non avere un metodo diretto per impostare Left/Top su se stesso, ad eccezione della funzione SetValue()
con valori di enum delle proprietà di dipendenza. C'è anche Canvas.SetLeft()
e Canvas.SetTop()
ma immagino che siano solo spessori su SetValue()
. Usarli non ha comunque aiutato.
Se non chiamo SetValue()
, viene visualizzata la mia tela (e gli oggetti figlio aggiunti) nell'app SL come ci si potrebbe aspettare, in alto a sinistra.
Se genero e la posizione di un oggetto Canvas
in Expression Blend, quindi il codice XAML generato include Canvas.Left
e Canvas.Top
valori delle proprietà sul Canvas
stessa, come mi sarei aspettato, così sembra a me che quello che sto cercando in C# dovrebbe lavoro.
Ma io non sembro essere in grado di impostare da solo i valori di sinistra/superiore da C# senza che SL nel browser diventi strano.
Qualche idea?
Modifica: il mio approccio è corretto, ma i canvas coords devono essere in virgola mobile, non integer - vedere la risposta accettata per i dettagli.
+1 Buona cattura, ben individuato – AnthonyWJones