2012-09-05 5 views
1

В проекте MVVM я хочу применить стиль «ReadOnlyTextBox» к элементу управления, только если свойство, выставленное с помощью viewmodel, установлено в true. я думал, что я мог бы использовать триггер, но, к сожалению, я узнал здесьПрименить стиль к управлению условно

Style Trigger to Apply another Style

и здесь

How to make Style.Triggers trigger a different named style to be applied

, что я не могу изменить свойство стиля внутри определения стиля. Я ищу простой альтернативный способ, иначе я буду использовать триггер для применения всех свойств, содержащихся внутри стиля «ReadOnlyTextBox». Мне не нравится этот подход, потому что он нарушает принцип DRY, поэтому я надеюсь, что вы можете предложить что-то еще.

Благодаря Filippo

ответ

1

Если вы не на самом деле вынуждены использовать триггеры, прагматичный способ может быть с помощью IValueConverter, который принимает ViewModel-значение в качестве ввода и возвращает нужный стиль (smoewhat похож на DataTemplateSelectors), а затем просто сделайте что-нибудь наподобие

<UserControl.Resources> 
<prefix:StyleConverter x:Key="styleConverter"/> 
</UserControl.Resources> 
<!-- blabla --> 
<TextBox Style="{Binding SomeCondition, Converter={StaticResource styleConverter}}"/> 
<!-- blabla --> 
0

Вы можете использовать стильный селектор для применения стилей на основе пользовательского условия.

StyleSelector

+0

разве это просто использовать, когда вы используете это внутри ItemsControl? –

Смежные вопросы