2012-05-04 24 views
8

Có thể thực hiện trong XAML một cái gì đó như ffloat: để lại một hình ảnh trong CSS. Tôi cần phải tạo ra một cái gì đó như thế này:Cách "nổi" hình ảnh trong XAML (Windows 8 Metro)

enter image description here

với kích thước hình ảnh khác nhau và độ dài văn bản.

Sửa: Các warp văn bản xung quanh hình ảnh không phải là tĩnh trong trường hợp của tôi, đó là tạo ra trong mã C# mà trả về một danh sách các yếu tố TextBlock (với Chạy)

Trả lời

3

Các giải pháp dường như được sử dụng RichTextBlockOverflow và OverflowContentTarget được mô tả trong bài trình bày này: http://video.ch9.ms/build/2011/slides/APP-914T_Street.pptx

+0

Tại chỗ trên! Đồng thời xem [this] (http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.richtextblockoverflow (v = win.10) .aspx) – wpfwannabe

1

This question dường như được yêu cầu cho một cái gì đó tương tự với những gì bạn muốn. Câu trả lời here sẽ chứng minh một giải pháp cho những gì bạn mong muốn.

Một bản tóm tắt của câu trả lời là, sử dụng một FlowDocument như ví dụ sau:

<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ập nhật

Như bang câu hỏi của bạn, bây giờ bạn đang sử dụng một số mã C# để tạo TextBlock/Run Các phần tử, cả hai có thể là con của đối tượng Đoạn. Vì vậy, chỉ đơn giản là tên của bạn Paragraph như vậy:

<FlowDocument> 
    <Paragraph x:Name="textPara"> 
     <Floater HorizontalAlignment="Left"> 
      <BlockUIContainer> 
       <Image Source="/FlowDocumentTest;component/dog.png" Width="100" /> 
      </BlockUIContainer> 
     </Floater> 
    </Paragraph> 
</FlowDocument> 

Sau đó, trong C#, thêm tạo TextBlock của bạn hoặc Run s đến Inlines tài sản của textPara, tức là

var runToInsert = new Run("Some text to display"); 
textPara.Inlines.InsertAfter(textPara.Inlines.FirstInline, runToInsert); 
+0

Tôi chỉnh sửa các câu hỏi. Văn bản trên không phải là tĩnh trong trường hợp của tôi, nhưng một loạt các hộp văn bản. Tôi chèn chúng vào một StackPanel nhưng làm thế nào để chèn chúng vào này? –

+0

Cập nhật câu trả lời của tôi với cách bạn có thể tự động thêm nội dung. – Lukazoid

+0

Tôi không nghĩ rằng Paragprah trong một Đoạn là hợp lệ. Trình biên dịch agress –

3

Với Silverlight 4 bạn sẽ đạt được điều này bằng cách sử a RichTextBox:

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

Có vẻ như Win8 Metro có RichTextBox, và cũng có một InlineUIContainer, vì vậy một cái gì đó như trên sẽ hoạt động!

+0

làm thế nào để bạn tạo điều này trong C#? Tôi có một danh sách các TextBlocks (với Runs) vì vậy tôi đoán tôi có thể chuyển đổi một firts này và tôi sẽ được ok –

+0

dường như không hoạt động http://dl.dropbox.com/u/73642/flow.png –

Các vấn đề liên quan