Per i miei propri controlli di solito faccio qualcosa di simile:
<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>
Dove "FooDesignTimeData" è una classe che fornisce dati in tempo di progettazione nella forma appropriata (che implementa l'interfaccia dalla vista del modello di esecuzione è una buona pratica Qui).
Non vedo perché questo non funzionerebbe anche per un controllo di terze parti. Potresti anche non dover ricomporre il controllo: potresti essere in grado di scappare semplicemente specificando il controllo di terze parti all'interno del tuo stile e assegnandogli un contesto di data e ora di progettazione come specificato sopra, ma non ho provato quello scenario. Presumo che si verificheranno tutti questi problemi perché si è costretti a utilizzare un controllo che non ha un'esperienza di progettazione ottimale (ad esempio fornendo un Vendor.Controls.Design.dll o Vendor.Controls.Expression.Design. file dll).
Per lavorare con TemplateBindings, non ho una soluzione eccezionale. Di solito creo una pagina di test che mostra il mio controllo e mi consente di cambiare i template. Durante l'integrazione avrai una vista aggiuntiva (all'interno dell'app o come app separata) che ti consente di creare e manipolare le istanze del controllo secondo necessità. L'azione trigger mirata a GoToStateAction di Blend SDK è spesso utile qui. Ad esempio, creare un pulsante per ogni stato visivo e quindi utilizzare il clic anche per attivare una transizione verso uno stato particolare. In questo modo puoi facilmente testare tutti i tuoi stati e le transizioni mentre sei vincolato a testare i dati. Hacky e non proprio i dati del tempo di progettazione, ma funziona.
fonte
2012-07-08 17:25:39
Come ho detto '{Binding}' è facile a causa di 'd: DataContext', ma sto cercando' {TemplateBinding} 's. –
Hai provato a fare quanto sopra, ma assegnando d: DataContext come parte dello stile? Non ho una soluzione eccezionale per questa situazione: di solito creo una pagina di test che mostra il mio controllo e mi consente di cambiare i template. Hacky, ma funziona. –
Questo sembra ragionevole. Devo provare questo me stesso. Ma devi modificare XAML per una versione di integrazione o puoi fornire anche il binding? –