2010-03-04 82 views

回答

0

你需要看的RichTextBox和FlowDocument的,如果它是WPF和RichTextBox的,如果的Silverlight 4.0。

的Silverlight 4.0解决方案

 <RichTextBox TextWrapping="Wrap" IsReadOnly="False"> 
     <Paragraph> 
      More text here .. 
      <InlineUIContainer> 
       <Image Source="abc.jpg"/> 
      </InlineUIContainer> 
      more and more text here; 
      <LineBreak /> 
     </Paragraph> 
    </RichTextBox> 

WPF解决方案 -

<RichTextBox> 
<FlowDocument IsEnabled="true"> 
    <Paragraph> 
    Text text .. 
    <Button Margin="10,0,10,0" Content="A Button Float"/> 
    More text.. 
    </Paragraph> 
    <Paragraph TextAlignment="Center"> 
    <Image Source="abc.jpg"/> 
    text text.. 
    </Paragraph> 
    </FlowDocument> 
</RichTextBox> 
+0

任何在Silverlight 3.0中做这件事的方法是什么? – abudker 2010-03-08 21:12:00

+2

这并不像HTML那样将图片包裹在图片的周围,而是将图片与文字内嵌在一起,看起来很可笑。文本与巨大的空白。 – 2010-04-16 16:33:24

1

我解决这个问题而回。我知道的并不是一个好方法。这将工作,虽然它只是痛苦。

为了简化说明,为什么我们不假定图像位于页面的右上角,文本需要位于图像的左下方。

首先将TextBlock和图像放在一起。

计算TextBlock最底部的点和图像最底部的点。虽然TextBlock的是你在一个时间到图像下方的新创建的TextBlock移动一个字就越大。这将创建文本换行的假象(使用他们的首要利润和实际高度。

leftText.Text = textToWrap; 
    bottomText.Text = string.Empty; 
    Stack<string> wordsToMove = new Stack<string>(); 
    double imageBottomPoint = image1.ActualHeight + image1.Margin.Top; 
    while ((leftText.ActualHeight + leftText.Margin.Top) > (imageBottomPoint + 14)) 
    { 
     int lastSpace = leftText.Text.LastIndexOf(' '); 
     string textToMove = leftText.Text.Substring(lastSpace).Trim(); 
     BlockedText.Text = leftText.Text.Remove(lastSpace); 
     wordsToMove.Push(textToMove + ' '); 
    } 
    StringBuilder sb = new StringBuilder(bottomText.Text); 
    while (wordsToMove.Count > 0) 
    { 
     sb.Append(wordsToMove.Pop()); 
    } 

    bottomText.Text = sb.ToString();