Приведение SelectedItem WPF Combobox к цвету вызывает исключение - PullRequest
3 голосов
/ 15 апреля 2010

У меня есть список данных, привязанный к доступным системным цветам. Когда пользователь выбирает цвет, запускается следующий код:

private void cboFontColour_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    Color colour = (Color)(cboFontColour.SelectedItem);
}

При этом создается исключение при кастинге со следующим сообщением: «Указанный каст не действителен». Когда я нахожу курсор мыши над cboFontColour.SelectedItem в отладчике, это всегда объект Color.

Я не понимаю, почему система, по-видимому, не может преобразовывать цвет в цвет, любая помощь будет очень необходима.

Ответы [ 4 ]

0 голосов
/ 13 ноября 2014

У меня возникла та же проблема, и ни одно из предложений по этому вопросу не сработало.Я продолжал получать исключения при попытке привести к типу (Color), и код даже не скомпилировался, если бы я попытался использовать Color?или «как».Закончилось придумывание следующего обходного пути.Это не идеально, потому что теперь мне нужно создать новый объект, но, по крайней мере, он работает:

string colorName = _comboBox.SelectedValue.ToString();
Color color = (Color)ColorConverter.ConvertFromString(colorName);
0 голосов
/ 15 апреля 2010

Как вы настроили привязку к доступным системным цветам?Если вы используете статические свойства класса SystemColors, обратите внимание, что, несмотря на имя класса, не все эти записи являются объектами Color (но также SolidColorBrushes и ResourceKeys).Вы всегда можете сделать

    MessageBox.Show(cboFontColour.SelectedItem.GetType().ToString());
    // or
    MessageBox.Show(cboFontColour.SelectedValue.GetType().ToString());

, чтобы проверить тип.

0 голосов
/ 15 мая 2010

Ааа, наконец, решил это. На самом деле функция возвращала свойство DependancyProperty вместо цвета. Не уверен, как я так долго скучал

0 голосов
/ 15 апреля 2010

Вы должны всегда использовать is и as вместо прямого преобразования типов. Кроме того, убедитесь, что Color на самом деле тот же тип, который вы видите в отладчике.

...