2009-02-03 43 views
24

Tôi có một điều khiển TextBlock databound (đang được sử dụng bên trong một DataTemplate để hiển thị các mục trong ListBox) và tôi muốn làm cho tất cả văn bản trong điều khiển in đậm. Tôi không thể tìm thấy một thuộc tính trong trình thám hiểm thuộc tính để đặt toàn bộ văn bản thành chữ đậm và tất cả những gì tôi có thể tìm thấy trực tuyến là sử dụng thẻ <Bold> bên trong TextBlock, nhưng tôi không thể đặt đến trực tiếp từ nguồn dữ liệu.Đặt TextBlock được in đậm khi DataBound trong WPF

Phải có cách để thực hiện việc này - nhưng làm cách nào? Tôi rất thiếu kinh nghiệm trong WPF vì vậy tôi không thực sự biết nơi để tìm.

Trả lời

69

Tôi có thiếu thứ gì đó hay bạn chỉ cần đặt thuộc tính FontWeight thành "Đậm"?

<TextBlock FontWeight="Bold" Text="{Binding Foo}" /> 
+0

Cảm ơn! Điều đó hoạt động. Tuy nhiên, điều tương tự cũng không hiệu quả với FontWeight of Italic. Có cách tương tự dễ dàng để làm nghiêng không? – robintw

+6

Chắc chắn là! FontStyle. Xem http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock.fontstyle.aspx –

0

Bạn nói rằng dữ liệu đến trực tiếp từ nguồn dữ liệu; là nó có thể đặt một lớp trừu tượng ở phía trước của nó? Nó khá phổ biến để tạo ra một View cho những gì bạn đang hiển thị, và có View giao tiếp với dữ liệu. Việc thực hiện phổ biến nhất của ý tưởng này là Model View View-Model (MVVM). Có một đọc về nó trực tuyến.

Bạn có thể có thuộc tính 'DisplayText' được gắn với hộp văn bản và chỉ đơn giản là 'getter' kết thúc tốt văn bản cơ bản. Nó có thể phát hiện nếu văn bản đã được gói trong và nếu không, quấn nó.

Ví dụ:

public class TestView { 
    private Test datasource; 
    public TestView(Test source) 
    { 
    this.datasource = source; 
    } 

    public string DisplayText { 
    get { 
     if (datasource.Text.Contains("<bold>")==false) { 
      return "<bold>" + datasource.Text + "</bold>"; 
     } 
     return datasource.Text; 
    } 
    } 
} 

Sau đó, liên kết với Chế độ xem thay vì trực tiếp đến đối tượng.

2

Thay vì chỉ có một TextBlock, hãy thử này:

<TextBlock> 
    <Bold> 
    <Run /> 
    </Bold> 
</TextBlock> 

Sau đó DataBind đến Run.TextProperty để thay thế.

+1

lợi thế là gì? – nicolas

+0

Trong khi câu hỏi ban đầu hỏi cách đặt toàn bộ khối được in đậm, điều này rất hữu ích nếu bạn muốn các phần cụ thể của văn bản được in đậm - giả sử các phần tử là các mục riêng biệt mà bạn có thể liên kết. –

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