2012-12-27 30 views
6

Tôi có một TextBlock:Làm cách nào để nối thêm văn bản thông thường vào một TextBlock đã có Liên kết với thuộc tính văn bản của nó?

<TextBlock x:Name="someText" Text="{Binding ElementName=theList, Path=SelectedItem.Name, Mode=TwoWay}" /> 

Và như bạn thấy, nó là ràng buộc để sản phẩm được chọn của nguyên tố khác. Bây giờ, chúng ta hãy nói rằng, ví dụ, mục đã chọn nói "Xin chào". Và tôi muốn gắn thêm tên của mình vào nó (trong XAML, không phải mã-đằng sau), để nó đọc như sau: "Xin chào, Mũi tên". Tôi có thể làm cái này như thế nào?

Trả lời

3

Với cấu hình này, điều duy nhất bạn có thể làm là có văn bản đó trong mục đã chọn. Vì vậy, những gì tôi muốn giới thiệu là một cái gì đó hơn dọc theo những dòng này:

<StackPanel Orientation="Horizontal"> 
    <TextBlock x:Name="someText" 
     Text="{Binding ElementName=theList, 
         Path=SelectedItem.Name, 
         Mode=TwoWay}" /> 
    <TextBlock x:Name="suffixText"/> 
</StackPanel> 

Với cấu hình này, bạn có thể cung cấp suffixText bất kỳ cách nào bạn muốn và có được kết quả bạn đang tìm kiếm.

0

bạn cần tạo một MultiValueConverter để kết nối hai chuỗi. Bạn có thể chuyển các chuỗi đó từ xaml sang trình biến đổi. thêm chi tiết xem article

10

Hãy thử điều này:

<TextBlock x:Name="someText" TextWrapping="NoWrap">    
    <Run Text="{Binding ElementName=theList, Path=SelectedItem, Mode=TwoWay}" /> 
    <Run Text=" Arrow." /> 
</TextBlock> 

giải pháp XAML không sẵn nào được nêu trên Metro XAML:

Bạn có thể sử dụng StringFormat:

<TextBlock x:Name="someText" Text="{Binding ElementName=theList, Path=SelectedItem, Mode=TwoWay, StringFormat={}{0} Arrow.}" /> 

Ngoài ra bạn có thể sử dụng MultiBinding và StringFormat :

<TextBlock> 
    <TextBlock.Text> 
      <MultiBinding StringFormat="{}{0} Arrow."> 
       <Binding ElementName="theList" Path="SelectedItem.Name" />      
      </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 
+1

Đối với StringFormat: 'Property 'StringFormat' không được tìm thấy trong loại Binding.' Và' MultiBinding không được hỗ trợ trong dự án kiểu Windows Metro.' – Arrow

+4

@Arrow bạn nói đúng. Hãy thử giải pháp đầu tiên của tôi với Run. – kmatyaszek

+3

Một 'TextBlock' với nhiều' Run' chắc chắn là cách để thực hiện điều này. –

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