2011-02-09 20 views
19

Tôi đã tự hỏi điều gì đó và không thể tìm thấy bất kỳ chủ đề liên quan nào. Tôi có ràng buộc sau đây:Có thể thêm nhiều ký tự hơn sau một ràng buộc trong xaml không?

Content="{x:Static resx:Resource.Form_OtherOption_Description}" 

Điều này sẽ đặt một chuỗi trong nhãn. Những gì tôi đã yêu cầu bản thân mình là nếu tôi có thể thêm một ":" sau đó ràng buộc, không phải trong mã, chỉ trong xaml. Nhãn đại diện cho một cái gì đó như "Tên:". Nhưng thêm ":" như một phần của ràng buộc không phải là một tùy chọn.

Sửa

Tôi đang làm việc trong 3,5 phiên bản

Bất kỳ lời đề nghị.

Xin cảm ơn trước.

+0

Nếu bạn ở độ tuổi 3,5, bạn có thể cần phải sử dụng giải pháp của @ H.B. – user7116

Trả lời

30

Bạn có thể thực hiện điều này với một cái gì đó như:

<TextBlock Text="{Binding Source={x:Static resx:Resource.Form_OtherOption_Description}, 
         StringFormat={}{0}:}" /> 

Edit:<Label> s Content tài sản không tôn trọng StringFormat tài sản của một ràng buộc rõ ràng. Mà tôi đã tìm thấy đã được chuyển đến tài sản ContentStringFormat trên <Label>.

<Label Content="{x:Static resx:Resource.Form_OtherOption_Description}" 
     ContentStringFormat="{}{0}:" /> 
+1

+1, Saw bạn tìm thấy câu trả lời là tốt :) Vì vậy, 'ContentControl' có' ContentStringFormat', 'HeaderedContentControl' có' HeaderStringFormat', và 'ItemsControl' có' ItemStringFormat'. Điều cần biết –

+1

Xuất hiện rằng 'Label.Content' không nhận' StringFormat' từ ràng buộc vì 'TargetType' không phải là' chuỗi', mà thay vào đó 'đối tượng'. Trong trường hợp 'TextBlock.Text', kiểu đích là' string', và do đó nó được sử dụng trong ràng buộc. – user7116

+1

Điểm tốt - mặc dù không phải là sang trọng, bạn có thể thêm một TextBlock vào nội dung nhãn, nhưng đây sẽ là phí bổ sung. – Andrew

0

Bạn có thể tạo trình chuyển đổi nhận chuỗi đầu vào và thêm ":".

public class AddStringToStringConverter : IValueConverter 
{ 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     string input = value as string; 
     string suffix = parameter as string; 

     return input + suffix; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

XAML:

<Window.Resources> 
    <local:AddStringToStringConverter x:Key="AddStringToStringConverter"/> 
</Window.Resources> 
... 
<Label Text="{Binding Source={x:Static resx:Resource.Form_OtherOption_Description}, Converter={StaticResource AddStringToStringConverter}, ConverterParameter=:}"/> 

Hoặc một cái gì đó như thế. Đã thử nó và nó làm việc cho nguồn của tôi ít nhất.

Nếu bạn có khoảng trắng và nội dung tương tự trong bạn ConverterParameter bạn có thể sử dụng dấu ngoặc kép để đảm bảo không được xử lý.

Edit: À phải ha ... vâng ... có cũng StringFormat mà tôi chưa bao giờ cần thiết trước khi, ehehehe ...

3

Hãy thử Ràng buộc của tài sản StringFormat - nó có thể làm rất đơn giản những gì bạn muốn.

9

Bạn cũng có thể sử dụng MultiBinding với StringFormat ví dụ:

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="ID {0} Name: {1} Age: {2}"> 
      <Binding Source="{x:Static resx:SomeResx.ID}"/> 
      <Binding Path="Name"/> 
      <Binding Path="Age"/> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

Bạn có thể sử dụng điều này trong một điều khiển nội dung TextBlock TextBlock.Text (xin lỗi tôi không thể lấy mã để hiển thị lên cho điều này trên)

+0

Theo sáu bản câu trả lời, câu trả lời phía trên nhãn sử dụng contentStringFormat. Để có được các multibindings trên để làm việc với một nhãn gán TextBlock cho nội dung của nó. – Andrew

19

Nếu bạn đang sử dụng WPF 4.0, bạn cũng có thể làm điều này:

<TextBlock> 
     <Run Text="{Binding SomeLabel}"/> 
     <Run Text=":"/> 
</TextBlock> 

Điều này thực sự nối hai chuỗi từ hai thẻ Run và sao chép vào TextBlock.Text thuộc tính !.

Sử dụng phương pháp này, bạn thậm chí có thể liên kết với các thuộc tính khác nhau trong trình bày và hiển thị nó trong một TexBlock.Xem ví dụ tuyệt vời này:

Can we concat two properties in data binding?

3

Có thể. Ở đây tôi thêm "thử nghiệm" sau khi văn bản ràng buộc (clouds.all) trong cửa sổ điện thoại.

<TextBlock Text="{Binding Path=clouds.all, StringFormat=\{0\}testing}"/> 
1

nếu bạn sử dụng một nhãn bên trong một thanh tiến trình bạn có thể sử dụng theo cách này:

<Label x:Name="Progress" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontWeight="Bold" Foreground="White" Opacity=".7" 
     Content="{Binding Path=Value, RelativeSource={RelativeSource TemplatedParent}}" ContentStringFormat="{}{0}%"> 

theo cách này bạn có thể hình dung giá trị của progressbar với một% nói thêm.

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