2016-07-28 29 views
1

C#への接続でXAMLがどのように機能するかを理解するのは本当に苦労しています。 私の問題は、2つの異なるList<String>オブジェクトがコンテンツで満たされていることです。List<String>に背景色を「青」にし、もう1つに背景色を「赤」にします。その後、私は私のListBoxリストボックスの項目の背景色をプログラムで変更します。

に私のXAMLのListBoxのコードを表示したい:

<ListBox x:Name="ListBox1" HorizontalAlignment="Left" Height="240" Margin="81,80,0,0" VerticalAlignment="Top" Width="321" BorderBrush="#FF6C6C6C" SelectionMode="Single" SelectionChanged="ListBoxSelectionChanged"> 

</ListBox> 

ListBoxコントロールにすべてのコンテンツをロードする私のC#コード

public partial class MainWindow : Window 
{ 
public void AddItemsToListBox() 
{ 
    foreach (var object1 in objects1) 
    { 
     Thread.Sleep(1); 
     listBox1.Items.Add(object1.label); 
     //I want these Objects to be blue 
    } 
    foreach (var object2 in objects2) 
    { 
     Thread.Sleep(1); 
     ListBox2.Items.Add(object2.label); 
     //I want these Objects to be red 
    } 
} 
} 
+2

[回答](http://stackoverflow.com/a/18982258/1997232)を参照してください。 WPFでは、バインディングを使用する必要があります。 'Items.Add()' - wayは廃止されました。そして、その 'Thread.Sleep(1)'は臭いがする。 'await Task.Delay()'で 'async/await'を使用すると、UIが停止するのを防ぐことができます。 – Sinatr

答えて

2

あなたが行く:

foreach (var object1 in objects1) 
{ 
    Thread.Sleep(1); 
    listBox1.Items.Add(new ListBoxItem { Content = object1.label, Background = Brushes.Blue }); 
} 
foreach (var object2 in objects2) 
{ 
    Thread.Sleep(1); 
    ListBox2.Items.Add(new ListBoxItem { Content = objects2.label, Background = Brushes.Red }); 
    //I want these Objects to be red 
} 

より良い方法は、データバインディングやスタイルなどを使用することです。

+0

ありがとう、魅力的な作品:v –

0

をので追加コメントする50の評判が必要答えとして

なぜあなたはxamlでそれをしませんか?

<ListBox x:Name="ListBox1" Background="Red"> 

</ListBox> 

だけbackgroundプロパティを追加し、これはあなたのリストボックス色付けします

ができますが、手動でリストボックスにオブジェクトを追加する必要がいけないので、私はデータバインディングを学習することをお勧めWPFで良くなりたい場合は

し、その後MVVM

を見ては、ここで
+0

同じリストボックス内に2つの異なるリストがあるのでこれを行うことはできませんが、各リストに異なる色を付けることをお勧めします –

+1

ああ、表示されている行を変更できますか? ListBox2.Items.Add(objects2 。ラベル); 2つのリストボックスがあると信じられました – Sam

関連する問題