2011-05-28 30 views
3

如何在wpf列表框中更改前景文字顏色(不是所選文字或所選內容的背景)?比如說,我想讓所有的字母「a」都是綠色的,所有的字母「b」都是紅色的等等。我如何以編程方式做到這一點,因爲我在c#中添加它們?所有我能找到的是發佈有關更改選定文本的人,我想更改前景文本的顏色,使其看起來更有條理。只有一行wpf列表框的前景顏色是如何改變的?

在一個側面說明,爲什麼是stackoverflow給我這個問題的問題?說這個問題「不符合質量標準」。我認爲這是一個完全合法的問題。這個問題上有什麼過濾器,使它不符合任何標準?

我期待這樣做:

string[] pics= Directory.GetFiles(@"C:\\", "*.jpg"); 
     foreach (string pic in pics) 
     { 
      CHANGE THE FOREGROUND COLOR TO RED 
      lbxFileList.Items.Add(pic); 
     } 
string[] vids= Directory.GetFiles(@"C:\\", "*.mpg"); 
     foreach (string vid in vids) 
     { 
      CHANGE THE FOREGROUND COLOR TO GREEN 
      lbxFileList.Items.Add(vid); 
     } 
+0

你想要什麼的前景色是規則? – svick 2011-05-28 13:26:00

回答

4

使用模板結合轉換器:

<ListBox x:Name="lbxFileList"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <StackPanel> 
     <TextBlock Text="{Binding Path=.}" ForeGround={Binding ., Converter={StaticResource ItemToBrushConverter}}/> 
     </StackPanel> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

轉換器應該將產品轉換爲Brush具有顏色你想要:

class FileNameToColorConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, 
     CultureInfo culture) 
    { 

     return value.EndsWith("mpg") ? Brushes.Green : Brushes.Red; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, 
     CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

正如你所看到的,我沒有用這個綁定源,我在c#中添加字符串。任何想法如何改變在C#中的顏色? – darthwillard 2011-05-28 21:15:50

+0

您應該仍然可以使用DataTemplate來控制項目的外觀。實際上,它們是通過綁定還是通過代碼添加都不重要。 – Joey 2011-05-28 21:48:11

+0

如何在C#中的例子 – darthwillard 2011-05-28 22:59:29

2

我同意以前的答案,但您也可以將listboxitems添加到您的列表框(而不是字符串),這樣您可以在將其添加到列表框之前更改前景色。

1

要建立在上述溶液:

foreach (string pic in pics) 
{ 
    if (string.IsNullOrEmpty(pic)) 
     continue; 

    string first = pic.Substring(0, 1); 
    Color color; 

    switch (first.ToLower()) 
    { 
     case "a": 
      color = Colors.Green; 
      break; 
     case "b": 
      color = Colors.Red; 
      break; 
     default: 
      color = Colors.Black; 
    } 

    ListBoxItem item = new ListBoxItem() { 
     Content = pic, 
     Foreground = new SolidColorBrush(color) 
    }; 

    lbxFileList.Items.Add(pic); 
} 
相關問題