2014-09-25 1 views
0

WinForms PropertyGrid을 사용하여 WPF 응용 프로그램에서 객체 속성을 편집하고 있습니다. 그러나 PropertyGrid은 특정 속성 유형에서 예상대로 작동하지 않습니다. 특히 Color 또는 Brush 유형의 속성을 표시하는 객체는 #FF000000과 같은 텍스트로 표시되며 PropertyGrid에서 해당 유형의 셀을 클릭하면 드롭 다운 색상 선택기 목록이 표시되지 않습니다. 이러한 유형의 내장 편집기가 존재한다는 것을 이해하고 있으므로이 작업을 수행하기 위해 추가 작업을 수행하지 않아도됩니다. (잘못하면 수정하십시오.)WinForms PropertyGrid가 WPF 응용 프로그램에서 예기치 않게 작동합니다.

간결함을 위해, 나는 막대한 양의 코드를 포함하지 않을 것이지만, 모든 것이 꽤 보일러라고 말하면 충분하다. 내 구현은 MSDN, SO 또는 무수히 많은 WPF PropertyGrid 예제에서 웹에 떠 다니는 것을 직접 추론합니다. PropertyGridWindowsFormsHost으로 묶여 있으며 사용자가 개체를 편집하려고 할 때마다 팝업되는 Window으로 바뀝니다. 이 가깝다 뭔가 :

`<Window> 
 
    <Grid> 
 
     <WindowsFormsHost> 
 
      <PropertyGrid> 
 
       ... 
 
      </PropertyGrid> 
 
     </WindowsFormsHost> 
 
    </Grid> 
 
</Window> 
 
// BTW everything's implemented in code.

실제 객체는 물론 직접 PropertyGrid에 전달되지 만, 미리 정의 된 방식에 대한 관심 만 속성을 노출 정의 PropertyEditorObjects에 싸여 및 시간에 이들 PropertyEditorObjects 할 수있다 ICustomTypeDescriptor을 구현하십시오. 특히 편집중인 오브젝트가 중첩 된 특성으로 PropertyGrid에 노출 될 필요가있는 특성을 가진 하위 오브젝트를 가질 경우. 일반적으로 : 특정 속성 유형 (색상, 글꼴 등) 만 텍스트로 표시되어 있는지, 그리고 PropertyGrid는 사용하지 않습니다

public class PropertyEditorObject 
{ 
    ... 

    property bool SomeProperty { get; set; } 
    property Size AnotherProperty { get; set; } 
    property Brush YetAnotherProperty { get; set; } 

    [TypeConverter(typeof(ExpandableObjectConverter))] 
    property ContentProperties MoreProperties { get; } 
}; 

public class ContentProperties : ICustomTypeDescriptor 
{ 
    // Implements all the usual ICustomTypeDescriptor stuff. 
} 
// The PropertyGrid.SelectedObject is set to an instance of the PropertyEditorObject. 

모든 것은 내가이 글의 시작 부분에서 언급 한 것을 제외 작동 해당 유형에 적합한 편집기.

ColorDialog, FontDialog 등과 같이 기본 제공 WinForms 편집기를 사용하여 휠을 다시 만들지 않고도이 유형을 편집하고 싶습니다. 앱은 데모 단계에만 있습니다. 이 문제에 대한 어떤 방향이라도 크게 감사 할 것입니다. 고맙습니다.

답변

1

이것은 예상됩니다. WinForms 속성 표는 Color, Brush 또는 FontFamily과 같은 WPF 유형을 전혀 알지 못하므로 사용자 정의 편집기가 없습니다. 타사 WPF 속성 표 중 하나를 사용해 보셨습니까? 나는 Extended WPF Toolkit이 하나 있다고 믿는다.

+0

저는 오히려 형식 변환기를 제공하고 PropertyGrid를 사용하기 때문에 상당히 강력하고 시간이 오래 걸립니다. 나는 ExtendedWPFToolkit 사이트를 읽었지만 아직 아무것도 다운로드하지 않았다. 왜냐하면 내가 먼저 해결책을 찾아야겠다고 생각했기 때문이다. 또한 제 3 자 앱의 '커뮤니티 버전'에 대한 책임을지고 싶지는 않지만 잘 살펴 보겠습니다. 고맙습니다. –

+0

충분하지만, WinForms 속성 표에서 WPF 형식에 대한 사용자 지정 편집기를 원한다면 어쨌든 직접 작성해야합니다. 시간이 많이 걸리는 "aspect"가 창 밖으로 나옵니다. –

+0

앞서 언급 한 문제에 대한 해결책으로'Extended WPF Toolkit'과'PropertyGrid'를 사용하여 다운로드하고 설치하고 사용해 보았습니다. 그것을 싫어하지만, 내가 지불 한 것을 정확히 얻었습니다. NuGet의 설치 여부에 관계없이 몇 시간 동안 고생 한 후, 프로젝트 참조가 누락 되었기 때문에 하나씩 빌드 오류 수정,'# using' 지시자 - 대부분 문서화가 잘되어 있지 않은 경우. - 더 많은 문서화되지 않은 속성 등으로 내 속성을 다시 꾸미기 - 마침내 w/o 오류를 작성하여 실행하려고했습니다 ... –

0

내 임시 방편 : Install Extended WPF Toolkit Plus 사용 불꽃 촬영과 squigglies 회전, (주장보다 '유형'을 지원하는 V2.3의 '수정'의 모양을 기다린 편집기로 (A SelectedObject*s* 속성이)가 PropertyGrid Plus 아웃 사이드, 문자 'a'등) 그리고 사용자가 지원되지 않는 '유형'을 편집하려고하는 경우 sorry, but you should really send us some money first.이라는 예외가 발생합니다. 그것을 발명하자마자 더 많은 풍자가 가능합니다. 그들의 제안에 대한 논평자에게 고맙습니다. Toodles. 솔루션에 대한

+0

OOps,'PropertyGrid Plus'는 돈을 먼저 보내야합니다. Grrrr .... 나는 잡을 줄 알았다! –

+0

임시 해결책으로 비용이 들지 않았으므로 필자는 모든 '델파이 프로그래머'를 모아 특수 캠프에 넣은 '최종 솔루션'을 공개해야 할 것입니다. (오, 그건 또 다른 프로젝트입니다. , 죄송합니다.) 어쨌든, 제한이나 WinForms PropertyGrid 및 단점으로 EWT PropertGrid를 사용할 수 있습니다. 후자의 경우, 새롭고 향상된 WPF PropertyGrid라는 또 다른 프로젝트를 진행할 수도 있습니다. 계속 지켜봐. –

+0

누군가 CodeClject에 네이티브 WPF PropertyGrid를 게시했습니다. http://www.codeproject.com/Articles/87715/Native-WPF-PropertyGrid에서 Windows Workflow Foundation의 PropertyInspector를 사용하여 '본격적인 속성 표'로 사용했습니다. . 불행히도, 예비 테스트 후 Winforms PropertyGrid보다 더 나은 기능을 수행하지 못합니다. 브러시, 펜 등은 여전히 ​​텍스트로 표시되며 편집기를 사용할 수 없습니다. 나는 커스텀 에디터/컨버터를 추가 할 수있을 것이라고 확신하지만, Winforms PropertyGrid에 대해서도 마찬가지이다. 이미 몇 가지 유형을 수행했다. 충분히 잘 작동합니다. –

0

업데이트 :

1) 원래의 게시물에 명시된 바와 같이 윈폼 PropertyGrid는, 예를 들어, 그들이 필요 속성에 EditorAttributes를 추가 사용 색, 글꼴 등을 열고 Winforms ColorDialog, FontDialog 등을 편집하여 편집하십시오. 형식 변환이 필요하지만 코드 몇 줄만 필요합니다. 최고의 해결책은 아니지만 일합니다.

2) Extended WPF Toolkit PropertyGrid을 사용하십시오.작동하지만 한계가 있습니다. 모든 유형과 다중 객체 선택을 지원하지 않습니다 (즉, SelectedObjects 속성 없음). 첫 번째 문제는 툴킷 v2.3에서 수정 될 예정입니다. 두 번째는 기능을 용이하게하기 위해 래퍼 (wrapper)가없는 showstopper의 일종입니다.

3) Extended WPF Toolkit Plus, PropertyGrid Plus을 사용하십시오. 다중 선택이 가능하지만 유형 선택이 제한적입니다. 또한, 큰 dinero 비용.

4) WWF PropertyInspector을 WPF PropertyGrid로 사용하십시오. 종이로보기 좋았지 만, WinForms PropertyGrid보다 기능이 좋았습니다. 편집자/변환기가 필요합니다.

관련 문제