2017-06-22 103 views
1

我想在循環的每次迭代結束時使用C#向我的MainWindow添加一個TextBlock。如何使用C#來防止文本塊重疊?

但是,每次迭代它們都會被添加到前一個之上。 TextBlocks的哪些屬性,如果有的話,允許我保持它們不重疊?

以下是裏面一個for循環:

TextBlock result = new TextBlock(); 

result.Text = [string]; 

result.Width = 200; 
result.Height = 100; 
result.Margin = new Thickness(20, 20, 20, 20); 

result.Name = "email" + [string]; 

Analysis_Space.Children.Add(result); 

Analysis_Space指的是我的主窗口的主電網。

+0

不要使用'Margin'到位置控制,使用適當的*佈局*。將控件放入合適的[容器](http://www.wpf-tutorial.com/panels/introduction-to-wpf-panels/)。例如。你現在已經有了'Grid',[setup](http://www.wpf-tutorial.com/panels/grid/)它的列和行,並把孩子放在那裏。 – Sinatr

+0

如果您使用Margin進行正確對齊,請使用帶有Veritcal Orientation的StackPanel –

+0

除了使用適當的Panel(而不是Grid)之外,您不應在後面的代碼中創建或操作UI元素。更好地使用ItemsControl並將其ItemsSource屬性綁定到'ObservableCollection '。有關所有詳細信息,請參閱[數據模板概述](https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/data/data-templating-overview)文章。還要注意,面板可以嵌套。無需將元素添加到頂層面板。 – Clemens

回答

0

正確使用面板控制將幫助您解決此問題。取決於您的GUI需求,使用哪個面板取決於您。請參閱this鏈接。

例如,在Analysis_Space上放置新的StackPanel。然後,將您的文本區域添加到StackPanel

您的新代碼將類似於下面:

TextBlock result = new TextBlock(); 
result.Text = [string]; 
result.Width = 200; 
result.Height = 100; 
result.Margin = new Thickness(20, 20, 20, 20); 
result.Name = "email" + [string]; 
stackPanel.Children.Add(result); 

在上面的代碼中,stackPanel代表StackPanel實例,它位於主網格面板上。

+0

這非常有幫助,謝謝! –

0

如果您正在使用網格,但您沒有告訴程序在哪個行/列應該放置文本塊,它會將它們放置在默認的0,0位置(即Grid.Row = 0和Grid。列= 0)

必須這樣做:

Grid.SetRow(result, 1); 

設置你的結果在行號1.你可以做同樣的列

+0

這也有幫助;謝謝。 –