2010-04-15 8 views
3

사용할 수있는 시스템 색에 대한 콤보 박스 데이터가 있습니다. 이것은 다음과 같은 메시지와 함께 캐스팅 예외가 발생WPF Combobox의 SelectedItem을 색상으로 변환하면 예외가 발생합니다.

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

: 사용자가 다음과 같은 코드가 발사되는 컬러 선택하면. "지정한 캐스트가 잘못이다" 디버거에서 cboFontColour.SelectedItem 위로 마우스를 가져 가면 항상 Color 객체입니다.

왜 시스템이 겉으로보기에는 컬러에서 컬러로 캐스팅 할 수 없는지 이해할 수 없지만 어떤 도움이 필요합니다.

+0

동일한 네임 스페이스입니까? 즉, 그것들 중 하나입니다. 색채와 다른 것 .Else.Etc.Color? – ANeves

+0

예, 모두 동일한 네임 스페이스에 있습니다. 둘 다 System.Windows.Media.Color입니다. –

+0

ComboBox를 만드는 데 사용하는 XAML을 제공 할 수 있습니까?! – gehho

답변

0

아 결국 마침내. 실제로 반환 된 기능은 Color 대신 DependancyProperty입니다. 내가 너무 오래 그것을 놓친 이유를 모르겠다.

0

직접 입력 변환 대신 항상 isas을 사용해야합니다. 또한 색상이 실제로 디버거에 표시되는 것과 동일한 유형인지 확인하십시오.

+0

시도했지만 컴파일 오류가 발생했습니다. 오류 as 연산자는 참조 형식 또는 nullable 형식 ('System.Windows.Media.Color'는 nullable 값 형식 임)과 함께 사용해야합니다. –

+0

@ 닉 Udell, 당신은'컬러를 할 수 있습니까? color = cboFontColour.SelectedItem을 Color? '로 설정하고 null인지 확인하십시오. 더 많은 정보는'is'와'as'에 대해 읽고, 그것에 관한 다른, 완전한 스레드에 대해서도 계속 읽으십시오. – ANeves

+0

훌륭하게 작동합니다. 감사합니다. –

0

사용 가능한 시스템 색상에 대한 바인딩을 어떻게 설정 했습니까? SystemColors 클래스의 정적 속성을 사용하는 경우 클래스 이름에도 불구하고 이러한 항목이 모두 Color 개체 (하지만 SolidColorBrushes 및 ResourceKeys도 해당)라는 점에 유의하십시오. 유형을 확인하기 위해 항상

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

을 수행 할 수 있습니다.

0

나는 같은 문제를 겪고 있었고,이 질문에 대한 제안은 전혀 이루어지지 않았다. (Color)로 캐스팅 할 때 예외가 계속 발생하고 'Color'를 사용하려고하면 코드가 컴파일되지 않습니다. 또는 'as'. 다음 해결 방법을 제안했습니다. 이상적인 것은 아닙니다. 이제는 새 객체를 만들어야하지만 적어도 작동해야합니다.

string colorName = _comboBox.SelectedValue.ToString(); 
Color color = (Color)ColorConverter.ConvertFromString(colorName); 
관련 문제