是否可以在 XAML 中为 CSS 中的图像执行类似 ffloat:left 的操作。我需要创建这样的东西:
具有可变的图像尺寸和文本长度。
编辑:在我的情况下,图像周围的文本扭曲不是静态的,它是在 C# 代码中创建的,返回一个 TextBlock 元素列表(带有运行)
是否可以在 XAML 中为 CSS 中的图像执行类似 ffloat:left 的操作。我需要创建这样的东西:
具有可变的图像尺寸和文本长度。
编辑:在我的情况下,图像周围的文本扭曲不是静态的,它是在 C# 代码中创建的,返回一个 TextBlock 元素列表(带有运行)
使用 Silverlight 4,您可以使用RichTextBox
:
<RichTextBox TextWrapping="Wrap" IsReadOnly="False">
<Paragraph>
More text here ..
<InlineUIContainer>
<Image Source="abc.jpg"/>
</InlineUIContainer>
more and more text here;
<LineBreak />
</Paragraph>
</RichTextBox>
看起来 Win8 Metro 有一个RichTextBox,也有一个InlineUIContainer,所以上面的东西应该可以工作!
该解决方案似乎使用了本演示文稿中描述的 RichTextBlockOverflow 和 OverflowContentTarget:http: //video.ch9.ms/build/2011/slides/APP-914T_Street.pptx
这个问题似乎在要求与您想要的类似的东西。这里的答案应该证明您想要的解决方案。
答案的摘要是,使用FlowDocument
类似以下示例:
<FlowDocument>
<Paragraph>
<Floater HorizontalAlignment="Left">
<BlockUIContainer>
<Image Source="/FlowDocumentTest;component/dog.png" Width="100" />
</BlockUIContainer>
</Floater>
Here is where the text goes to wrap around the image.
</Paragraph>
</FlowDocument>
更新
正如您的问题所述,您现在正在使用一些 C# 代码来生成 TextBlock/Run Elements,两者都可以是 Paragraph 对象的子级。所以简单地命名你的名字Paragraph
:
<FlowDocument>
<Paragraph x:Name="textPara">
<Floater HorizontalAlignment="Left">
<BlockUIContainer>
<Image Source="/FlowDocumentTest;component/dog.png" Width="100" />
</BlockUIContainer>
</Floater>
</Paragraph>
</FlowDocument>
然后在 C# 中,将你生成TextBlock
的 s 或Run
s 添加到Inlines
textPara 的属性中,即
var runToInsert = new Run("Some text to display");
textPara.Inlines.InsertAfter(textPara.Inlines.FirstInline, runToInsert);