在 XAML 中是否可能像 CSS 中的 ffloat:left 一样设置图像位置。我需要创建以下内容:具有可变图像尺寸和文本长度的内容。
编辑:在我的情况下,环绕图像的文本不是静态的,而是在 C# 代码中创建的,该代码返回 TextBlock 元素列表(带有 Runs)。
编辑:在我的情况下,环绕图像的文本不是静态的,而是在 C# 代码中创建的,该代码返回 TextBlock 元素列表(带有 Runs)。
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有一个富文本框,还有一个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元素,这两个元素都可以作为段落对象的子元素。因此,只需将您的Paragraph
命名如下:
<FlowDocument>
<Paragraph x:Name="textPara">
<Floater HorizontalAlignment="Left">
<BlockUIContainer>
<Image Source="/FlowDocumentTest;component/dog.png" Width="100" />
</BlockUIContainer>
</Floater>
</Paragraph>
</FlowDocument>
TextBlock
或Run
添加到textPara的Inlines
属性中,即:var runToInsert = new Run("Some text to display");
textPara.Inlines.InsertAfter(textPara.Inlines.FirstInline, runToInsert);
FlowDocumentScrollViewer
,如果需要的话可以禁用滚动条和其他功能 :) - Lukazoid