Условное моделирование в Silverlight?

В то время как все хорошо со стандартным моделированием управления в Silverlight я имею, недавно начал использовать более динамические методы выбирающих данных, которые будут отображены в средствах управления объектами. Одни из средств управления, которые я переделываю, являются набором ссылок.

Проблема, которую я имею, - то, что каждая ссылка окрашена по-другому когда moused. Один красный, один синий, один зеленый цвет, и т.д. Существует ли способ разработать эти объекты, не жертвуя динамикой использования управления объектами с шаблоном данных?

15
задан deanvmc 13 June 2010 в 23:14
поделиться

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 .

Если вы хотите использовать более сложное условие, чем логическое, вы всегда можете создать Словарь объектов для стилей в своем конвертере, а затем заставить конвертер выполнять поиск, но я обнаружил, что обычно логические значения работают в большинстве случаев.

24
ответ дан 1 December 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: