Actualmente estoy esperando usar un PropertyGrid para permitir a los usuarios editar algunas de mis clases, sin embargo, he topado con objetos que pasan al UITypeEditor (s) que usan. Cuando el usuario presiona el menú desplegable, quiero mostrar un cuadro de lista de texturas ya cargadas para elegir, si quieren usar una textura, la aplicación no se ha cargado aún, pueden hacer clic en un botón para elegir una de un cuadro de diálogo de archivo. En caso de que no tenga sentido aquí un simulacro de la forma:Pasando objetos a un UITypeEditor
.
Mi problema: Para completar el cuadro de lista, necesito acceder a la clase que gestiona la lista de recursos del UITypeEditor.
Ahora he resuelto este problema para mis propias clases dándoles una referencia sobre la creación de su objeto de gestión. En el UITypeEditor, uso esa referencia para acceder a lo que necesito. Sin embargo, no puedo hacer esto para las clases que no he escrito, como la clase XNA Texture2D.
Éstos son lo que las clases que estoy usando el siguiente aspecto:
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; }
....
}
He estado buscando en mis opciones y que parecen ser:
- Hacer las clases de gestión estática.
Realmente no quiero hacer esto. Hay varias clases de administración ya que cada recurso se carga de manera diferente. También hay clases que deben crearse antes de estas y que se transfieren.
- Realice las clases de administración de singletons.
Realmente no quiero hacer esto tampoco. Parece una manera rápida y sucia de "esconder" el problema en lugar de "resolverlo". También podría querer la opción de tener varias clases de administración en el futuro que eliminen los singletons.
- Crea una clase contenedora que contiene la referencia a una clase de gestión y su destino (como XNA Texture2D).
Esto es lo que estoy pensando en hacer. Sería bastante simple y rápido de hacer, pero algo me molesta, pero no sé qué.
¿Alguna idea sobre los métodos anteriores u otros para pasar lo que necesito en el UITypeEditor?
Gracias por leer.
Mi diseño actual es el siguiente: MaterialDatabase: Contiene un diccionario de materiales que contengan las clases Texture2D. GeometryDatabase: contiene un diccionario de StaticGeometryChunks que contienen GeometryData. TileDatabase: contiene un diccionario de mosaicos que contiene StaticGeometryChunk y un material. Cuando se crean estas clases, se pasan a una vista de árbol para mostrar lo que han cargado, es una selección en la vista de árbol que activa la cuadrícula de propiedad para ver la etiqueta de nodos (una referencia al objeto de diccionario). Tengo la sensación de que esto significa que el contexto será la vista de árbol? – Kath
Lo siento, mi formateo ha desaparecido arriba y me quedé sin caracteres. Gracias por la respuesta. La principal clase general es el Azulejo, usan los otros dos objetos (Materiales/Geometría) para sus datos. Esto es para que si un usuario cambia una textura en un material, todos los mosaicos que usan ese material obtengan el cambio también. ¿Podría un ligero rediseño de esta configuración hacer que sea más fácil? – Kath
context.Instance es el propietario de la propiedad. En tu caso, sería material. Entonces, esta clase de Material debería poder acceder a las posibles texturas. –