Frage

Ich hoffe, noch ein Property zu verwenden, um Benutzer zu erlauben, einige meiner Klassen zu bearbeiten, jedoch habe ich gegen eine Wand mit Gegenständen auf den UITypeEditor vorbei (n) sie verwenden. Wenn der Benutzer die Tropfen nach unten drückt möchte ich von bereits geladenen Texturen ein Listenfeld zeigen, wählen, ob sie die Anwendung eine Textur verwenden möchten nicht geladen aber sie können auf eine Schaltfläche klicken, um eine aus einer Datei-Dialog zu wählen. Im Fall mache ich keinen Sinn, hier ein Modell der Form:

Dropdown-Bild.

Mein Problem:. , um das Listenfeld füllen ich Zugriff auf die Klasse benötigen, die eine Liste von Ressourcen aus dem UITypeEditor verwaltet

Jetzt habe ich dieses Problem für meine eigenen Klassen gelöst, indem sie einen Verweis auf die Schaffung von ihrer Verwaltung Objekt geben. Im UITypeEditor verwende ich dann diesen Verweis zugreifen, was ich brauche. Allerdings kann ich nicht tun für Klassen Ich habe nicht, wie XNA Texture2D Klasse geschrieben.

Hier sind, was die Klassen I Look bin mit wie:

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; }
    ....
}

Ich habe an meinen Möglichkeiten gesucht, und sie scheinen zu sein:

  1. Nehmen Sie die Verwaltung von Klassen statisch.

Ich will nicht wirklich, dies zu tun. Es gibt mehrere Klassen verwalten, da jede Ressource unterschiedlich geladen wird. Es gibt auch Klassen, die, bevor diese erstellt werden müssen und werden übergeben.

  1. Nehmen Sie die Verwaltung von Klassen Singletons.

Ich will nicht wirklich diese entweder tun. Es scheint wie eine schnelle und schmutzige Art und Weise, das Problem zu „verstecken“ statt „lösen“ es. Ich könnte auch die Möglichkeit, will in der Zukunft mehr Verwaltung Klassen, die die Singletons beseitigen.

  1. Erstellen Sie eine Wrapper-Klasse, die den Verweis auf eine Verwaltungsklasse und ihr Ziel (wie XNA Texture2D).
  2. hält

Dies ist derzeit, was ich denke zu tun. Sein wäre ganz einfach und schnell, aber etwas zu tun, um es mir nörgelt, aber ich weiß nicht, was.

Alle Gedanken auf den oben genannten oder anderen Methoden zu übergeben, was ich in den UITypeEditor brauchen?

Danke für das Lesen.

War es hilfreich?

Lösung

In der EditValue Methode werden Sie einen Zusammenhang gegeben. Verwenden Sie context.Instance, um das Objekt zuzugreifen, die Ihr Eigentum hält. Diese Aufgabe sollte eine Eigenschaft enthalten, die Sie Sie anzeigen möchten, den Zugriff auf die Liste der Dinge gibt. Sie könnten testen, ob context.Instance ITextureProvider zum Beispiel ist, werfen sie dann und die Texturen zugreifen. Nicht sicher, ob dies Sinn in Ihrem Design macht aber lassen Sie mich wissen.

Andere Tipps

Als Alternative können Sie den folgenden Ansatz versuchen. Ich finde es sehr elegant, weil es nicht eine Liste der verfügbaren Eigenschaftswerte in dem Objekt speichern erfordert. Deshalb kann zum Beispiel, können Sie einen Satz von Werten auf eine Form und einen weiteren Satz auf einem anderen zeigen.

  1. Erstellen Sie eine Schnittstelle IYourDataProviderService.
  2. Erstellen Sie eine Implementierung von IYourDataProviderService, die die konkreten Daten weiß zu liefern.
  3. Erstellen Sie eine Klasse Umsetzung ISite. In GetService () Methode eine Instanz der Klasse, die das Rück IYourDataProviderService implementiert, wenn der Parameter ist service typeof (IYourDataProviderService). Ich verließ Rest ISite Methoden werfen NotImplementedException (außer Designmode-Eigenschaft) und für mich gearbeitet, aber wahrscheinlich ist dies keine ideale Lösung.
  4. Im 'Load' Event-Handler-Implementierung auf die Site-Eigenschaft der Property zuweisen.
  5. Genießen Sie!
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top