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.

War es hilfreich?

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

erreichen

Findname funktioniert nur in WPF

Zitat von MSDN :

  

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top