2017-11-06 7 views
0

私は、ランタイム中に動的に追加されたボタンの位置を取得する問題に直面しています。以下のコードを見つけてください。WPFで動的に追加されたコントロールの位置を取得するには?

foreach (string subfolder in Directory.GetDirectories(path)) 
     { 
      Button btnSubfolder = new Button(); 
      btnSubfolder.Name = "btnsubfolder" + column.ToString(); 
      btnSubfolder.Content = subfolder.Substring(subfolder.LastIndexOf("\\") + 1); 
      btnSubfolder.Margin = new Thickness(15, 15, 10, 0); 
      btnSubfolder.Width = 200; 
      btnSubfolder.Height = 50; 
      btnSubfolder.HorizontalAlignment = HorizontalAlignment.Left; 
      btnSubfolder.SetValue(Grid.ColumnProperty, column); 
      grdsbFolders.Children.Add(btnSubfolder); 
      var location = btnSubFolder.PointToScreen(new Point(0, 0)); //here i am getting the same position for all the added controls; 
     } 

ありがとうございます。

+0

を同じグリッドにすべてのボタンを追加します実際には同じ場所に配置されます。 – Chrille

+0

@chrille、問題解決の手助けはできますか? – Anjali

+0

私の答えを参照してください。 – Chrille

答えて

1

foreach (string subfolder in Directory.GetDirectories(path)) 
{ 
    Button btnSubfolder = new Button(); 
    btnSubfolder.Name = "btnsubfolder" + column.ToString(); 
    btnSubfolder.Content = subfolder.Substring(subfolder.LastIndexOf("\\") + 1); 
    btnSubfolder.Margin = new Thickness(15, 15, 10, 0); 
    btnSubfolder.Width = 200; 
    btnSubfolder.Height = 50; 
    btnSubfolder.HorizontalAlignment = HorizontalAlignment.Left; 
    btnSubfolder.SetValue(Grid.ColumnProperty, column); 
    grdsbFolders.Children.Add(btnSubfolder); 

    grdsbFolders.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); 
    grdsbFolders.Arrange(new Rect()); 
    var location = btnSubfolder.TranslatePoint(new Point(0, 0), grdsbFolders); 
} 
0

列または行を指定せずにグリッドにコントロールを追加すると、グリッド(0,0)の同じ場所にコントロールが配置されます。別の親コントロールを使用して、コントロールを別の方法で配置するか、グリッド内の列と行を指定します。

StackPanelを使用して、コントロールを垂直または水平に配置します。

ボタンボタンボタン

<StackPanel Orientation="Horizontal"> 
    <Button>Btn1</Button> 
    <Button>Btn2</Button> 
    <Button>Btn3</Button> 
</StackPanel> 

または垂直:あなたはまた、水平DockPanel

を見て持つことができます

ボタンを
ボタンあなたがButtonの実際の位置を得ることができる前にGridを測定し、配置する必要がある
ボタン

<StackPanel Orientation="Vertical"> 
    <Button>Btn1</Button> 
    <Button>Btn2</Button> 
    <Button>Btn3</Button> 
</StackPanel> 
+0

私はそれを特定の列に追加しています。私のコードをチェックしてください。 btnSubfolder.SetValue(Grid.ColumnProperty、column) – Anjali

+0

はい、ただし各繰り返しで同じ列ですか? – Chrille

関連する問題