2009-11-04 38 views
7

Tôi biết rằng TextBlock có thể trình bày một FlowDocument, ví dụ:Thiết WPF văn bản để TextBlock

<TextBlock Name="txtFont"> 
    <Run Foreground="Maroon" FontFamily="Courier New" FontSize="24">Courier New 24</Run> 
</TextBlock> 

Tôi muốn biết làm thế nào để thiết lập một FlowDocument được lưu trữ trong một biến để một TextBlock. Tôi đang tìm kiếm một cái gì đó như:

string text = "<Run Foreground="Maroon" FontFamily="Courier New" FontSize="24">Courier New 24</Run>" 
txtFont.Text = text; 

Tuy nhiên, Kết quả của đoạn mã trên là văn bản XAML được trình bày chưa phân tích.


EDIT: Tôi đoán câu hỏi của tôi chưa đủ rõ ràng. Điều tôi thực sự cố gắng đạt được là:

  1. Người dùng nhập một số văn bản vào RichTextBox.
  2. Ứng dụng lưu đầu vào của người dùng dưới dạng FlowDocument từ RichTextBox và nối tiếp nó vào đĩa.
  3. FlowDocument được deserialized từ đĩa thành biến văn bản.
  4. Bây giờ, tôi muốn có thể trình bày văn bản người dùng trong một TextBlock.

Vì vậy, theo như tôi hiểu, việc tạo đối tượng Chạy mới và đặt thông số theo cách thủ công sẽ không giải quyết được sự cố của tôi.


Vấn đề là serializing RichTextBox tạo Mục đối tượng, mà tôi không thể thêm vào TextBlock.Inlines. Do đó, bạn không thể đặt đối tượng được deserialized thành TextProperty của TextBlock.

Trả lời

3

Tôi biết rằng TextBlock có thể trình bày FlowDocument

gì làm cho bạn nghĩ? Tôi không nghĩ rằng đó là sự thật ... Nội dung của một số TextBlock là thuộc tính Inlines, là InlineCollection. Vì vậy, nó chỉ có thể chứa Inline s ...Nhưng trong một số FlowDocument, nội dung là thuộc tính Blocks, chứa các phiên bản Block. Và Block không phải là Inline

5

tạo và thêm các đối tượng như sau:

 Run run = new Run("Courier New 24"); 
     run.Foreground = new SolidColorBrush(Colors.Maroon); 
     run.FontFamily = new FontFamily("Courier New"); 
     run.FontSize = 24; 
     txtFont.Inlines.Add(run); 
+3

run.Foreground = Brushes.Maroon; – CannibalSmith

+0

Cannibal đúng. Cảm ơn. :) – Blounty

+0

Cảm ơn bạn đã giải pháp. Vui lòng xem chỉnh sửa của tôi. – Elad

0

Nếu bạn FlowDocument đã deserialized, nó có nghĩa là bạn có một đối tượng kiểu FlowDocument, phải không? Hãy thử đặt thuộc tính Text của TextBlock của bạn thành giá trị này. Tất nhiên, bạn không thể làm điều này với txtFont.Text = ..., vì điều này chỉ hoạt động cho chuỗi. Đối với các loại đối tượng, bạn cần phải thiết lập các thuộc tính phụ thuộc trực tiếp:

txtFont.SetValue(TextBlock.TextProperty, myFlowDocument) 
0

Dưới đây là cách chúng tôi đang thiết lập giao diện của một khối chữ bằng cách gán kiểu theo phong cách.

// Set Weight (Property setting is a string like "Bold") 
    FontWeight thisWeight = (FontWeight)new FontWeightConverter().ConvertFromString(Properties.Settings.Default.DealerMessageFontWeightValue); 

    // Set Color (Property setting is a string like "Red" or "Black") 
    SolidColorBrush thisColor = (SolidColorBrush)new BrushConverter().ConvertFromString(Properties.Settings.Default.DealerMessageFontColorValue); 

    // Set the style for the dealer message 
    // Font Family Property setting is a string like "Arial" 
    // Font Size Property setting is an int like 12, a double would also work 
    Style newStyle = new Style 
    { 
     TargetType = typeof(TextBlock), 
     Setters = { 
      new Setter 
      { 
       Property = Control.FontFamilyProperty, 
       Value = new FontFamily(Properties.Settings.Default.DealerMessageFontValue) 
      }, 
      new Setter 
      { 
       Property = Control.FontSizeProperty, 
       Value = Properties.Settings.Default.DealerMessageFontSizeValue 
      }, 
      new Setter 
      { 
       Property = Control.FontWeightProperty, 
       Value = thisWeight 
      }, 
      new Setter 
      { 
       Property = Control.ForegroundProperty, 
       Value = thisColor 
      } 
     } 
    }; 

    textBlock_DealerMessage.Style = newStyle; 

Bạn có thể loại bỏ phần kiểu và đặt thuộc tính trực tiếp, nhưng chúng tôi muốn giữ mọi thứ được sắp xếp theo phong cách để giúp chúng tôi tổ chức giao diện trong suốt dự án.

textBlock_DealerMessage.FontWeight = thisWeight; 

HTH.

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