2016-06-24 13 views
0

Ich versuche, Elemente mit Maus und durch Code zu verschieben und neu zu positionieren. Aber ich denke, ich vermisse etwas oder mache etwas falsch. Also habe ich eine kleine Beispiel-App gebaut. Es ist nur eine leere WPF-Anwendung mit dieser Mainwindow FunktionWas ist los mit Canvas.SetTop (Element, Position)

public MainWindow() 
    { 
     InitializeComponent(); 
     Label lText = new Label(); 
     lText.Content = "this is my test label"; 
     lText.Height = 50; 
     lText.Width = 50; 
     lText.Background = Brushes.Aqua; 
     // do I really need to do this? 
     lText.VerticalAlignment = System.Windows.VerticalAlignment.Top; 
     lText.HorizontalAlignment = System.Windows.HorizontalAlignment.Left; 
     // this part already fails 
     Canvas.SetTop(lText, 20); 
     Canvas.SetLeft(lText, 10); 
     this.Content = lText; 
    } 
+2

@Clemens: Warum ein Kommentar –

Antwort

0

Die Lösung war, dass die Linke und Top-Eigenschaften müssen innerhalb des Xaml gesetzt werden, bevor Sie es lesen können. Ich bekam immer NaN und konnte daher auch nicht den richtigen Wert einstellen.

1

Die beigefügten Eigenschaften Canvas.Left und Canvas.Top (die hinter im Code von den Canvas.SetLeft und Canvas.SetTop Methoden festgelegt werden) nur eine Wirkung für ein Element, das ein direktes Kind von ein Canvas-Steuerelement

So eine Leinwand als Content Element deklarieren in XAML Ihren Mainwindow suchen:

<Window ...> 
    <Canvas x:Name="canvas" /> 
</Window> 

dann das Element in der Canvas' Children Sammlung in Code-behind:

Canvas.SetTop(lText, 20); 
Canvas.SetLeft(lText, 10); 
canvas.Children.Add(lText); 
+0

Okay - Verstanden. Wie kann ich ein Steuerelement verschieben, ohne ein Kind der Zeichenfläche zu sein? Ich meine, wenn ich überhaupt keine Leinwand habe, wie in meinem Beispiel. – freeskydiver

+0

Wenn Sie kein Canvas haben, fügen Sie eins zu Ihrem XAML hinzu. Es gibt natürlich auch andere Möglichkeiten, ein Element zu positionieren, wie zum Beispiel "Margin" oder "LayoutTransform" oder "RenderTransform", aber Canvas ist der typische Weg dazu. – Clemens