Отсутствует Silverlight InlineCollection.Add(InlineUIContainer)?

У меня возникают трудности при добавлении встроенного определенного типа InlineUIContainer в InlineCollection (свойство Content) TextBlock. Похоже, что метод.Add() InlineCollection не принимает этот тип, однако вы можете явно установить его через XAML без явной пометки содержимого как InlineContainer, как продемонстрировано во многих примерах:

http://msdn.microsoft.com/en-us/library/system.windows.documents.inlineuicontainer.aspx

Можно ли программно добавить один из них, как показано ниже?

Target.Inlines.Add(new Run() { Text = "Test" });
Target.Inlines.Add(new InlineUIContainer() { 
Child = new Image() { Source = new BitmapImage(new Uri("http://example.com/someimage.jpg")) } });
Target.Inlines.Add(new Run() { Text = "TestEnd" });

У меня есть чувство, что происходит, что Silverlight использует конвертер значений для создания прогонов, когда указано в XAML, как в примере, который не использует InlineContainer, но я не уверен, где искать, чтобы узнать.

Конкретная ошибка, которую я получаю, заключается в следующем:

Cannot add value of type 'System.Windows.Documents.InlineUIContainer' to a 'InlineCollection' in a 'System.Windows.Controls.TextBlock'.

2 ответа

Решение

Как отмечает Jedidja, нам нужно использовать RichTextBox, чтобы сделать это в Silverlight.

Вы не можете добавить () Runs напрямую, но вы можете добавить Span, содержащие Runs.

Интересно, что вы также можете сделать это:

textBlock.Inlines.Clear();
textBlock.Inlines.Add(new Span());
textBlock.Inlines[0] = new Run();

Не то чтобы неплохо было взломать то, что фреймворк активно пытается помешать вам сделать.

PS Если вы не можете понять, что делает XAML, проверьте визуальное дерево.

Другие вопросы по тегам