Erstellen einer Silverlight-Datatemplate in Code
-
09-06-2019 - |
Frage
Wie erstelle ich eine Silverlight-Datenvorlage in Code? Ich habe viele Beispiele für WPF gesehen, aber nichts für Silverlight.
Edit:. Hier ist der Code, den ich jetzt dies, unten auf die Antwort von Santiago basierend bin mit
public DataTemplate Create(Type type)
{
return (DataTemplate)XamlReader.Load(
@"<DataTemplate
xmlns=""http://schemas.microsoft.com/client/2007"">
<" + type.Name + @" Text=""{Binding " + ShowColumn + @"}""/>
</DataTemplate>"
);
}
Das funktioniert wirklich gut und ermöglicht es mir, die Bindung an der Fliege zu ändern.
Lösung
Auch wenn Sie es nicht programmatisch erstellen können, können Sie es von einem XAML-Zeichenfolge in Code wie folgt geladen werden kann:
public static DataTemplate Create(Type type)
{
return (DataTemplate) XamlReader.Load(
@"<DataTemplate
xmlns=""http://schemas.microsoft.com/client/2007"">
<" + type.Name + @"/>
</DataTemplate>"
);
}
Der obige Codeschnipsel erstellt eine Datenvorlage ein einziges Steuerelement enthält, die eine Benutzersteuerung mit dem Inhalt sein kann, die Sie benötigen.
Andere Tipps
hatte ich ein paar Probleme mit diesem Code bekommen Element nicht foung Ausnahmen. Nur als Referenz, war es, dass ich brauchte, um meinen namesspace in der Datatemplate enthielt ...
private DataTemplate Create(Type type)
{
string xaml = @"<DataTemplate
xmlns=""http://schemas.microsoft.com/client/2007""
xmlns:controls=""clr-namespace:" + type.Namespace + @";assembly=" + type.Namespace + @""">
<controls:" + type.Name + @"/></DataTemplate>";
return (DataTemplate)XamlReader.Load(xaml);
}
Ja, Silverligt 4 älter als WPF aktuelle Versionen. Wenn Sie eine Vorlage als eine Ressource hinzufügen, das heißt wie ich Ich habe eine Usercontrol-Vorlage in Application.xaml MergedResources zwischen Resource. In XAML, wenn Tag implementiert IDictionary könnten Sie Benutzer x: Key-Attribut. Wie das
<ResourceDictionary>
<DataTemplate x:Key="TextBoxEditTemplate">
<Some user control x:Name="myOwnControl" />
</DataTemplate>
</ResourceDictionary>
Ok! Sie können Ihre Vorlage erreichen, indem die Codierung, Application.Current.resources [ "TextBoxEditTemplate"] auf der anderen Seite werden einige Methoden zum Auffinden von Mitgliedern dieser Vorlage nicht. Key-Attribut für Objekte in diesem Datatemplate: Neben diesem Datatemplate IDictionary nicht implementiert, so dass Sie nicht x zuweisen. wie myOwnControl in Beispiel.
Ohne XAML aktuelle Silverlight hat einige Einschränkungen über die Schöpfung voll dynamische Code-behind DataTemplates.Even funktioniert es auf WPF.
Wie auch immer die beste Lösung, die von diesem Punkt ist die Schaffung von XAML-Skript für Datatemplate können Sie einige Werte Element in Datatemplate Skript assing. Wir haben unsere eigenen Usercontrols hat einige Eigenschaften mit DependencyObjectProperty ...
Endlich, wenn Ihr Objekt keine erbt hat, das heißt. kein MyControl: Usercontrol Sie erben MyObject: DependencyObject durch diese Weise können Sie Ihr Objekt durch den Aufruf wie Application.Current.Resources.FirstChilderen ...
erreichenFindname funktioniert nur in WPF
Die XAML-Verwendung, die den Inhalt für die Erstellung einer Datenvorlage definiert ist, nicht als eine einstellbare Eigenschaft ausgesetzt. Es ist ein besonderes Verhalten in der XAML-Verarbeitung eines Datatemplate Objektelement aufgebaut.