2011-08-20 30 views
16

Tôi muốn thêm văn bản vào các kết quả đó là ràng buộc với một khối văn bản:Thêm văn bản để một TextBlock ràng buộc

<TextBlock Text="{Binding Title}" Foreground="#FFC8AB14" FontSize="28" /> 

Các văn bản được hiển thị là:

" My title " 

Những gì tôi muốn được thể hiện là:

This is "My title" 
+0

Hy vọng rằng tôi đã làm cho nó rõ ràng hơn trong khi không thay đổi những gì bạn dự định. –

+0

@Jeff Mercado Cheers, Đã ở đó một lúc rồi. Hy vọng rằng đây sẽ là một giải pháp nhanh chóng cho một ai đó. Tôi sẽ có thông qua chỉ cần thêm một "" trước khi {} đã có thể làm việc, nhưng tôi quessed sai. – Rhys

+0

Tất cả vì lợi ích của việc có câu hỏi chất lượng cao hơn. ;) –

Trả lời

33

Bạn có thể sử dụng StringFormat tài sản của các ràng buộc:

<TextBlock Text="{Binding Title, StringFormat=This is {0}}"></TextBlock> 

Check-out bài đăng trên blog này để biết thêm thông tin: WPF String.Format in XAML with the StringFormat attribute.

+0

Điều này trông giống như tùy chọn ngữ nghĩa nhất. Cảm ơn – Rhys

+4

thiếu dấu phẩy?

+1

@GernBlanston Tại sao không sửa chữa nó thay vì chỉ ra trong bình luận? :) Tác giả sẽ nhận được thông báo. Bây giờ nó đã được sửa. –

3

Hi Bạn có thể viết như sau:

<TextBlock> 
    <TextBlock>This is </TextBlock> 
    <TextBlock Text="{Binding Title}"></TextBlock> 
</TextBlock> 
2

Bạn có thể thực hiện việc này bằng công cụ chuyển đổi.

<TextBlock Text="{Binding Title, ConverterParameter=This is, Converter={StaticResource TextPrefixConverter}}" Foreground="#FFC8AB14" FontSize="28" /> 

Trình biến đổi sẽ chỉ đơn giản là tiền tố giá trị bị ràng buộc với ConverterParameter.

public class TextPrefixConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    {       
     String result = String.Empty; 
     if (parameter != null) 
      result = parameter.ToString(); 

     if (value != null) 
      result += value.ToString(); 

     return result; 
    } 
... 
} 

Không rõ ràng là dấu cách và/hoặc dấu ngoặc kép là một phần của đầu ra. Nếu vậy, bộ chuyển đổi có thể được thay đổi để cắt không gian và/hoặc thêm dấu ngoặc kép vào chuỗi được tạo.

Một cách khác để làm điều này là:

<TextBlock Foreground="#FFC8AB14" FontSize="28" > 
    <Run Text="This is " /> 
    <Run Text="{Binding Path=Title}" />  
</TextBlock> 
6

Nếu bạn muốn làm điều đó trong các ràng buộc:

<TextBlock Foreground="#FFC8AB14" FontSize="28"> 
    <TextBlock.Text> 
     <Binding Path="Title"> 
      <Binding.StringFormat> 
       This is "{0}" 
      </Binding.StringFormat> 
     </Binding> 
    </TextBlock.Text> 
</TextBlock> 

phần tử cú pháp cần thiết để thoát khỏi dấu ngoặc kép. Nếu có dấu ngoặc kép mà chỉ để đánh dấu văn bản chèn vào và không nên xuất hiện trong đầu ra nó là dễ dàng hơn nhiều tất nhiên:

<TextBlock Text="{Binding Title, StringFormat={}This is {0}}" Foreground="#FFC8AB14" FontSize="28"> 
3

chỉ sử dụng StringFormat cho mục đích định dạng.

<TextBlock Text="{Binding Title,StringFormat='This is {0}'}" Foreground="#FFC8AB14" FontSize="28" /> 
0

Cách tiếp cận tốt nhất ở đây về hiệu suất, như đã trả lời, đang sử dụng StringFormat cho Binding và gán nó vào Text tài sản của TextBlock.

Tuy nhiên, nếu thực hiện không phải là một mối quan tâm, và XAML có thể đọc được ưa thích, cách tiếp cận khác là sử dụng Run bên TextBlock:

<TextBlock Foreground="#FFC8AB14" FontSize="28"> 
    This is <Run Text="{Binding Title}" /> 
</TextBlock> 

Ngoài ra, bằng cách này bạn có thể áp dụng phong cách khác nhau (màu text/nền, phông chữ in nghiêng/in đậm, kích thước phông chữ, v.v.) cho các phần khác nhau của số TextBlock, đó là điều bạn không thể làm với Binding 's StringFormat. Và đây là cách hiệu quả hơn việc có nhiều kiểu TextBlock s với các kiểu văn bản/nền khác nhau.

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