[英]Conditional Styling In Silverlight?
雖然我對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
屬性更改,這也將使樣式保持同步。
如果你想使用一個比布爾更復雜的條件,你總是可以在轉換器中創建一個對象字典到樣式,然后讓轉換器進行查找,但我發現通常布爾值在大多數情況下都有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.