2010-06-13 33 views
15

Mặc dù tôi ổn với kiểu điều khiển chuẩn trong Silverlight nhưng gần đây tôi đã bắt đầu sử dụng các phương pháp tìm nạp dữ liệu động hơn để hiển thị trong các điều khiển mục. Một trong những điều khiển mà tôi đang làm lại là một tập hợp các liên kết.Tạo kiểu có điều kiện trong Silverlight?

Vấn đề tôi gặp phải là mỗi liên kết có màu khác nhau khi được kết hợp. Một màu đỏ, một màu xanh dương, một màu xanh lá cây, v.v. Có cách nào để tạo kiểu cho các mục này mà không làm mất tính năng động của việc sử dụng một mục điều khiển với một mẫu dữ liệu?

Trả lời

24

Tôi đã thực hiện việc này bằng cách sử dụng trình chuyển đổi đơn giản trên thuộc tính của mô hình chế độ xem, ví dụ: giả sử bạn có thuộc tính boolean mà bạn muốn kiểm soát kiểu bạn có thể thực hiện việc này.

public class BoolToStyleConverter : IValueConverter 
{ 
    public Style TrueStyle{ get; set; } 
    public Style FalseStyle{ get; set; } 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return ((bool)value) ? TrueStyle : FalseStyle; 
    } 

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

    #endregion 
} 

sau đó như một nguồn lực bạn sẽ xác định hai phong cách của bạn ...

<common:BoolToStyleConverter x:Key="BoldTextConverter"> 
     <common:BoolToStyleConverter.TrueStyle> 
      <Style TargetType="TextBlock"> 
       <Setter Property="FontWeight" 
         Value="Bold"></Setter> 
      </Style> 
     </common:BoolToStyleConverter.TrueStyle> 
     <common:BoolToStyleConverter.FalseStyle> 
      <Style TargetType="TextBlock"> 
       <Setter Property="FontWeight" 
         Value="Normal"></Setter> 
      </Style> 
     </common:BoolToStyleConverter.FalseStyle> 
    </common:BoolToStyleConverter> 

sau đó bạn sẽ áp dụng nó để đối tượng của bạn như thế này ...

<TextBlock Text="{Binding Description}" 
      Margin="20,4,4,4" 
      Style="{Binding IsConfirmed, Converter={StaticResource BoldTextConverter}}"></TextBlock> 

đâu IsConfirmed là một thuộc tính boolean trên viewmodel, điều này cũng sẽ giữ cho kiểu đồng bộ nếu thay đổi thuộc tính IsConfirmed.

Nếu bạn muốn sử dụng điều kiện phức tạp hơn Boolean, bạn luôn có thể tạo từ điển đối tượng cho kiểu dáng trong trình chuyển đổi của mình và sau đó chuyển trình tìm kiếm, nhưng tôi thấy rằng boolean thường hoạt động trong hầu hết các trường hợp.

+0

Làm cho cảm giác hoàn hảo, cổ vũ! – deanvmc

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