Отсутствует Silverlight InlineCollection.Add (InlineUIContainer)? - PullRequest
2 голосов
/ 06 января 2011

У меня возникают проблемы при добавлении встроенного типа 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 ]

3 голосов
/ 08 ноября 2012

Как отметил Джедиджа, нам нужно использовать RichTextBox для этого в Silverlight.

0 голосов
/ 26 ноября 2012

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

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

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

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

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

...