2013-07-30 98 views
0

我有一個listBox的顏色,我想要獲取所選顏色字符串示例:紅色,黃色如何在列表框中添加selecteditem

問題是,當我得到的將selectedItem我需要將其轉換爲System.Windows.Media.Color得到的名稱,放入string在其他情況下使用它。 這裏是我使用的代碼,不幸的是我總是得到這個異常

Specified cast is not valid

System.Windows.Media.Color colo =(System.Windows.Media.Color)listColor.SelectedItem;

任何幫助會如此讚賞

+2

什麼'listColor.SelectedItem == null? 「」:listColor.SelectedItem.GetType()。FullName'評估爲? –

+4

顯示您用於填充列表框的代碼 –

+3

_i有一個colorBox的列表框是不真實的,這裏的原因很混亂。那個列表框裏面是什麼? –

回答

3

在XAML中的字符串是那麼容易轉換到你根本無法體會他們是非常不同的顏色。在C#中,你必須明確地轉換它。幸運的是,有一個內置的類,它可以這樣做:

string colorName = (string) listColor.SelectedItem; 
Color colorValue = ColorConverter.ConvertFromString(colorName); 
1

使用的SelectedValue代替:

System.Windows.Media.Color color = (System.Windows.Media.Color)listColor.SelectedValue; 
+0

我得到了同樣的異常 –

+1

@moez你確定在你的ListBox存儲System.Windows.Media.Colors? –

+2

這顯然是OP有一個充滿字符串的列表框。 –

0

當您將項目添加到您的列表框,你實際上添加Object秒。這意味着您在每個列表項中看到的文字是您添加的對象.ToString()

所以,如果你添加string,你會得到回string。如果您添加Color,則會返回Color

在你的情況,你似乎添加string。當然,您不能直接使用顏色來投射字符串,因此您應該將對象Color添加到您的列表中,或者您應該使用SelectedValue解析字符串來獲得Color

如果要直接添加對象Color,還可以使用屬性SelectedValuePath來設置將顯示在列表中的對象的屬性。你

同時也應該看看這個帖子,看看SelectedValueSelectedItem之間的區別:Difference between SelectedItem, SelectedValue and SelectedValuePath

0

嘗試這個 - >

  Color ChosenColor; 
      string SelectedColor= (string)listColor.SelectedItem;; 

      ChosenColor=(Color)ColorConverter.ConvertFromString(SelectedColor); 
1

固定它

塊引用 顏色colorValue =(彩色)(( System.Reflection.PropertyInfo)listColor.SelectedValue).GetValue(listColor,null);

+0

這是唯一可行的解​​決方案 - 從Color到Color(在相同的命名空間中)是一個可笑的飛躍, – T4NK3R