2017-06-22 6 views
1

私はループの各繰り返しの最後に、MainWindowにTextBlockを追加するためにC#を使用しようとしています。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

ために同じことを行うことができます。1.行番号にあなたの結果を設定する

Grid.SetRow(result, 1); 

:カラム= 0)

あなたがこれを行う必要がありますコントロール、適切な*レイアウト*を使用します。適切な[容器](http://www.wpf-tutorial.com/panels/introduction-to-wpf-panels/)にコントロールを入れてください。例えば。あなたは今、 'Grid'、[setup](http://www.wpf-tutorial.com/panels/grid/)の列と行を持ち、子をそこに置きます。 – Sinatr

+0

マージンを使用して正しく配置する場合は、Veritcal Orientationを使用するStackPanelを使用してください。 –

+0

グリッドの代わりに適切なパネルを使用する以外に、コードの背後にUIエレメントを作成または操作しないでください。 ItemsControlを使い、ItemsSourceプロパティを 'ObservableCollection 'にバインドしてください。すべての詳細については、[データテンプレートの概要](https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/data-templating-overview)を参照してください。パネルはネストすることもできます。トップレベルパネルに要素を追加する必要はありません。 – Clemens

答えて

0

パネルコントロールを正しく使用すると、これを解決するのに役立ちます。どのパネルを使用するかは、GUIのニーズに応じて異なります。リンクthisを参照してください。

たとえば、新しいStackPanelAnalysis_Spaceに設定します。次に、テキスト領域を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)。あなたが位置に `Margin`を使用しないでください列

+0

これも役に立ちました。ありがとうございました。 –

関連する問題