Silverlight 中的条件样式?
Posted
技术标签:
【中文标题】Silverlight 中的条件样式?【英文标题】:Conditional Styling In Silverlight? 【发布时间】:2011-03-03 07:58:59 【问题描述】:虽然我对 silverlight 中的标准控件样式很满意,但我最近开始使用更动态的方法来获取要在项目控件中显示的数据。我正在修改的控件之一是链接集合。
我遇到的问题是鼠标悬停时每个链接的颜色不同。一个红色、一个蓝色、一个绿色等。有没有办法在不牺牲使用带有数据模板的项目控件的动态的情况下设置这些项目的样式?
【问题讨论】:
【参考方案1】:我已经在视图模型的属性上使用了一个简单的转换器来完成此操作,例如,假设您有一个布尔属性,您想要控制可以执行此操作的样式。
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 是视图模型上的布尔属性,如果 IsConfirmed
属性发生更改,这也会使样式保持同步。
如果你想使用比布尔值更复杂的条件,你总是可以在转换器中创建一个对象字典到样式,然后让转换器进行查找,但我发现通常布尔值在大多数情况下都有效。
【讨论】:
以上是关于Silverlight 中的条件样式?的主要内容,如果未能解决你的问题,请参考以下文章
Silverlight & Blend动画设计系列十:Silverlight中的坐标系统(Coordinate System)与向量(Vector)运动
WPF DataGrid 样式-Silverlight DataGrid?