2017-04-16 3 views
-2

ProgressBarにTextBlockを動的に追加したいと思います。そして、このすべては、ループ内でのStackPanelに追加するように:2つのアイテムを互いに動的に追加しますか?

enter image description here

それは可能ですか?

foreach (var item in collection) 
{ 
    ProgressBar pg = new ProgressBar(); 
    //set values from collection 

    TextBlock t = new TextBlock(); 
    //set values from collection 

    StackPanel.Children.Add(pg); 
    StackPanel.Children.Add(t); 
}    
+0

広すぎます。もちろん、それは "可能"です。しかし、これを達成するための多くの方法があります。すべての最も適切な方法は、テキストと進行状況を表すビューモデルを使用し、次に、データテンプレートを使用して表示される、いくつかのタイプの 'ItemsControl'にバインドされたモデルのコレクションを持つことです。バーの上にテキストを置くグリッド)。いくつかの調査を行い、あなた自身で解決するために努力し、問題を解決する方法についての_specific_質問で、あなたが試したことを示す良い[mcve]を提供できるかどうかを質問してください。 –

答えて

0

私はあなたがここにGridを使用することを示唆している:

このコードは、私がプログレスバーを持っており、このTextBlockの下にいることが発生します。グリッド内にProgressBarTextBlockを追加し、StackPanelの中にGridを追加します。

foreach(コレクション内のvarアイテム) { ProgressBar pg = new ProgressBar();

TextBlock t = new TextBlock(); 
//set values from collection 

Grid grid = new Grid(); 
grid.Children.Add(pg); 
grid.Children.Add(t); 


StackPanel.Children.Add(grid); 

}

コレクション

から //設定された値は、それが役に立てば幸い!

+0

ありがとう、それはとても簡単でした。 – Patt

+0

TextBlockに 'Horizo​​ntalAlignment = Horizo​​ntalAlignment.Center、VerticalAlignment = VerticalAlignment.Center'を追加して、真ん中に置くこともできます。私は助けてうれしい! :) – mindOfAi

0

StackPanelのコントロールは重複しません。あなたがのためのビューモデルを持っていない場合

<ItemsControl Name="itemsStack" ItemsSource="{Binding Path=collection}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <ProgressBar Value="{Binding Path=progress}"/> 
       <TextBlock Text="{Binding Path=progress}" HorizontalAlignment="Center"/> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

:あなたは、動的にコードビハインドなしのコレクションから各要素のコントロールを作成することができ、追加の容器(グリッド)のItemsControlを使用して

foreach (var item in collection) 
{ 
    ProgressBar pg = new ProgressBar(); 
    //set values from collection 

    TextBlock t = new TextBlock(); 
    //set values from collection 

    Grid g = new Grid(); 
    g.Children.Add(pg); 
    g.Children.Add(t); 

    StackPanel.Children.Add(g); 
} 

を使用しますItemsSourceバインディングは、同じ効果を持つコードから割り当てることができます。

itemsStack.ItemsSource = collection; 
関連する問題