문제

나는 현재 사용자가 내 클래스를 편집 할 수 있도록 PropertyGrid를 사용하기를 희망하지만, 그들이 사용하는 UityPeeditor (들)에 물체를 전달하여 벽을 쳤다. 사용자가 드롭 다운을 누르면 선택할 수있는 이미로드 된 텍스처의 목록 상자를 표시하고 싶습니다. 응용 프로그램이로드되지 않은 텍스처를 사용하려면 버튼을 클릭하여 파일 대화 상자에서 하나를 선택할 수 있습니다. 여기서 양식의 모의가 이해가되지 않는 경우 :

Dropdown Image.

내 문제: Listbox를 채우려면 UityPeeditor의 리소스 목록을 관리하는 클래스에 액세스해야합니다.

이제 나는 그들의 수업에 대한이 문제를 그들의 관리 객체에 대한 제작에 대한 참조로 제공함으로써 내 자신의 수업을 위해 해결했습니다. UityPeeditor에서 나는 해당 참조를 사용하여 필요한 것에 액세스합니다. 그러나 XNA Texture2D 클래스와 같이 작성하지 않은 수업에 대해서는 이것을 할 수 없습니다.

내가 사용하는 수업은 다음과 같습니다.

class StaticGeometryChunk
{
    // Geometry data to draw with. Contains a reference to its managing 
    // class for use in its UITypeEditor.
    public GeometryData { get; set; }
    ....
}

class Material
{
    // These are XNA classes. I can't just add a reference to its managing 
    // class (I think?).
    public Texture2D Texture1 { get; set; }
    public Texture2D Texture2 { get; set; }
    ....
}

나는 내 옵션을보고 있었고 그들은 다음과 같습니다.

  1. 관리 클래스를 정적으로 만드십시오.

나는 정말로 이것을하고 싶지 않다. 각 리소스가 다르게로드되므로 여러 관리 클래스가 있습니다. 이것들 전에 만들어야하고 통과 해야하는 클래스도 있습니다.

  1. 관리 클래스 싱글 톤을 만드십시오.

나는 정말로 이것도하고 싶지 않다. 문제를 "해결"하는 대신 문제를 "숨기는"빠르고 더러운 방법처럼 보입니다. 또한 미래에 싱글 톤이 제거하는 여러 관리 클래스를 갖는 옵션을 원할 수도 있습니다.

  1. 관리 클래스 및 대상 (예 : XNA Texture2d)에 대한 참조를 보유하는 래퍼 클래스를 만듭니다.

이것은 현재 내가 생각하는 일입니다. 그것은 매우 간단하고 빠르게 할 것입니다.

위의 또는 다른 방법에 대한 생각이나 내가 필요한 것을 uitypeeditor에 전달하는 방법이 있습니까?

읽어 주셔서 감사합니다.

도움이 되었습니까?

해결책

editValue 메소드에서는 컨텍스트가 제공됩니다. 컨텍스트를 사용하여 속성을 보유한 객체에 액세스하려면 instance를 사용하십시오. 이 개체에는 표시 할 항목 목록에 액세스 할 수있는 속성도 포함되어야합니다. Context.instance가 ItextureProvider인지 테스트 한 다음 캐스트하고 텍스처에 액세스 할 수 있습니다. 이것이 당신의 디자인에서 의미가 있는지 확실하지 않지만 알려주세요.

다른 팁

대안으로 다음 접근법을 시도 할 수 있습니다. 객체에 사용 가능한 속성 값 목록을 저장할 필요가 없기 때문에 매우 우아합니다. 예를 들어, 한 값 세트를 한 형식으로 표시하고 다른 값 세트를 다른 값에 표시 할 수 있습니다.

  1. 인터페이스 iyourdataproviderservice를 만듭니다.
  2. 제공 할 콘크리트 데이터를 알고있는 iyourdataproviderservice의 구현을 만듭니다.
  3. 클래스 구현 ISITE를 만듭니다. getService () 메소드에서 servicetype 매개 변수가 typeof (iyourdataproviderservice) 인 경우 iyourdataproviderservice를 구현하는 클래스 인스턴스를 반환합니다. 나는 NotimplementedException (DesignMode 속성 제외)을 던지는 나머지 ISITE 방법을 남겼습니다. 그러나 아마도 이것이 이상적인 솔루션은 아닙니다.
  4. '로드'이벤트 핸들러에서 구현을 PropertyGrid의 사이트 속성에 할당합니다.
  5. 즐기다!
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top