c# – Silverlight中的條件樣式?
我所遇到的問題是,每個連結都被弄髒了.一個紅色,一個藍色,一個綠色等有沒有一種方法來樣式這些專案,而不犧牲使用資料模板的專案控制元件的動態?
我已經使用一個簡單的轉換器在檢視模型的屬性,例如讓我們說你有一個布林屬性,你想要控制一個風格,你可以做到這一點.
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 }
那麼作為一種資源,你可以定義你的兩種風格
<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>
那麼你可以將它應用到你的物件這樣…
<TextBlock Text="{Binding Description}" Margin="20,4,4,4" Style="{Binding IsConfirmed, Converter={StaticResource BoldTextConverter}}"></TextBlock>
其中IsConfirmed是viewmodel上的布林屬性,如果IsConfirmed屬性更改,這也將保持同步的樣式.
如果要使用比布林更復雜的條件,您可以隨時在轉換器中建立一個物件到“樣式”的字典,然後讓轉換器進行查詢,但是我發現通常布林工作在大多數情況下.
http://stackoverflow.com/questions/3034261/conditional-styling-in-silverlight