代码之家  ›  专栏  ›  技术社区  ›  deanvmc

Silverlight中的条件样式?

  •  15
  • deanvmc  · 技术社区  · 14 年前

    虽然我对Silverlight中的标准控件样式很满意,但最近我开始使用更动态的方法来获取要在项控件中显示的数据。我正在改写的控件之一是一组链接。

    我面临的问题是,当鼠标悬停时,每个链接的颜色都不同。一个红色、一个蓝色、一个绿色等。有没有一种方法可以在不牺牲将项控件与数据模板一起使用的动态性的情况下设置这些项的样式?

    1 回复  |  直到 14 年前
        1
  •  24
  •   luke    14 年前

    我在视图模型的一个属性上使用了一个简单的转换器,例如,假设您有一个布尔属性,想要控制一个样式,您可以这样做。

    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 属性更改。

    如果您想使用比布尔值更复杂的条件,您可以在转换器中创建一个对象到样式的字典,然后让转换器进行查找,但我发现布尔值在大多数情况下都有效。