2010-12-04 20 views
2

Ich bevölkere eine Klasse zur Laufzeit programmatisch und beginne damit, eine Sammlung von InlineCollection-Klassen zu erstellen. Die InlineCollection-Klasse kann jedoch nicht instanziiert werden.Erstellen einer Instanz WPF InlineCollection

Meine Frage ist, wie füge ich eine Sammlung von Inlines zu Span.Inlines hinzu, deren Typ InlineCollection ist, wenn ich keine Instanz davon erstellen kann?

Grundsätzlich brauche ich eine Sammlung einer Sammlung von Inline-Klassen, so dass ich Span.Inlines zufällig auf eine neue Sammlung von Inline-Klassen setzen kann.

Antwort

2

Werfen Sie einen Blick hier: http://msdn.microsoft.com/en-us/magazine/cc163371.aspx

Es sieht aus wie das, was Sie tun möchten, ist:

span.Inlines.Add(new Run("Some normal text")); 
var b = new Bold(); 
b.Inlines.Add(new Run(" Some bold text")); 
span.Inlines.Add(b); 
+0

Danke, aber was ich brauche, ist in der Lage sein, so etwas wie Sammlung zu tun , aber ich kann nicht hinzufügen eine Instanz von InlineCollection. Ich möchte eine Sammlung von InlineCollection-Klassen einrichten, damit ich span.Inlines zur Laufzeit auf eines der Objekte in der Sammlung festlegen kann. Hoffnung, die Sinn macht. –

+1

Ich denke, ich könnte einfach eine Sammlung von Run-Objekten erstellen und dann die Inline-Zeilen hinzufügen, die ich für jedes Run-Objekt in der Sammlung benötige ?! –

+0

@Carl: Ich denke, dass dein zweiter Vorschlag der richtige Weg ist. –

2

ja, wie Sie nicht InlineCollection Klasse instanziiert kann, aber was Sie tun können, ist beispielsweise die Verwendung List<Inline> und füllen Sie dies.

später ist es leicht, sie anzuwenden, zum Beispiel, ein TextBlock:

// create some inlines 
List<Inline> inlines = new List<Inline>(); 
inlines.Add(new Run() { Text = "text" }); 
Span span = new Span(); 
span.Inlines.AddSafe(new Run() { Text = "text inside span" }); 
inlines.Add(span); 

// now apply to a TextBlock 
TextBlock tb = new TextBlock() { TextWrapping = TextWrapping.Wrap }; 
tb.Inlines.Clear(); 
foreach (Inline i in inlines) 
    tb.Inlines.Add(i); 
Verwandte Themen