7 Stimmen

Entwurfszeitdaten für ControlTemplate

Die Bereitstellung von Daten zur Entwurfszeit für DataContext ist einfach mit der Verwendung von d:DataContext aber was ist mit Steuereigenschaften, auf die mit {TemplateBinding} o {RelativeSource TemplatedParent} von Style.Template ?

Sollte ich nur füllen Kontrolle mit Beispieldaten innerhalb Konstruktor/Loaded Ereignis, wenn DesignerProperties.GetIsInDesignMode(this) gibt true zurück ? (Dies ist nicht möglich, da es die normale Design-Erfahrung beeinträchtigen würde).

Was ist mit den Steuerelementen von Drittanbietern, die ich nicht ändern kann?

6voto

Mike Post Punkte 6278

Für meine eigenen Kontrollen mache ich normalerweise so etwas wie:

<Style x:Key="FooStyle>
  <Setter Property="Template>
    <Setter.Value>
      <ControlTemplate TargetType="FooControl">
        <Grid d:DataContext="{d:DesignInstance FooDesignTimeData, IsDesignTimeCreatable=True}">
          ... guts of control template go here ...
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

Dabei ist "FooDesignTimeData" eine Klasse, die Entwurfszeitdaten in geeigneter Form bereitstellt (die Implementierung der Schnittstelle von Ihrem Laufzeit-View-Modell ist hier eine gute Praxis).

Ich wüsste nicht, warum dies nicht auch für eine Steuerung von Drittanbietern funktionieren sollte. Möglicherweise müssen Sie nicht einmal das Steuerelement retemplate - Sie könnten in der Lage sein, weg, indem Sie nur die 3rd-Party-Steuerelement innerhalb Ihres Stils und geben es eine Designzeit Datenkontext wie oben angegeben, aber ich habe nicht versucht, dass Szenario. Ich gehe davon aus, dass Sie sich all diese Mühe machen, weil Sie gezwungen sind, ein Steuerelement zu verwenden, das nicht über eine große Designzeit Erfahrung (z. B. durch die Bereitstellung einer Vendor.Controls.Design.dll oder Vendor.Controls.Expression.Design.dll-Datei).

Um mit den TemplateBindings zu arbeiten, habe ich keine gute Lösung. Normalerweise erstelle ich eine Testseite, die mein Steuerelement anzeigt und mir erlaubt, die Vorlagen zu wechseln. Während der Integration haben Sie eine zusätzliche Ansicht (entweder innerhalb Ihrer App oder als separate App), die es Ihnen ermöglicht, Instanzen des Steuerelements nach Bedarf zu erstellen und zu manipulieren. Die GoToStateAction Targeted Trigger Action aus dem Blend SDK ist hier oft nützlich. Erstellen Sie zum Beispiel eine Schaltfläche für jeden visuellen Zustand und verwenden Sie dann die Click-Aktion, um einen Übergang zu einem bestimmten Zustand auszulösen. Auf diese Weise können Sie ganz einfach alle Ihre Zustände und Übergänge testen, während Sie an Testdaten gebunden sind. Hacky und nicht wirklich Designzeit Daten, aber es funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X