2016-06-24 14 views
0

マウスとコードを使用して要素を移動および再配置しようとしています。しかし、私は何かを見逃しているか、間違ったやり方をしていると思います。だから私は少しサンプルアプリケーションを構築しました。なお、このメイン・ウィンドウ機能を持つだけ空のWPFアプリのCanvas.SetTop(要素、位置)の問題

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

@クレメンス:なぜコメント –

答えて

0

を解決は左ということでしたおよびTopプロパティは、Xamlを読む前にXaml内で設定する必要があります。私はいつもNaNを取得していたので、正しい値を設定できませんでした。

1

添付プロパティのみの直接の子である要素の効果を有する(後ろCanvas.SetLeftCanvas.SetTop方法によって設定されたコードで)Canvas.LeftCanvas.Topキャンバスコントロール。

だからあなたのメインウィンドウのXAMLのコンテンツ要素としてキャンバスを宣言します

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

はその後の背後にあるコードでキャンバスChildrenコレクションに要素を追加します。

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

大丈夫ですか。キャンバスの子ではなくコントロールを移動するにはどうすればいいですか?私の例のようにキャンバスが全くないのならば。 – freeskydiver

+0

Canvasがない場合は、XAMLにCanvasを追加します。 'Margin'や' LayoutTransform'や 'RenderTransform'のように要素を配置する方法は他にもありますが、Canvasがそれを行う典型的な方法です。 – Clemens