Как применить один и тот же триггер данных к нескольким разнородным элементам?

#c# #.net #wpf #triggers #wpf-controls

#c# #.net #wpf #триггеры #wpf-элементы управления

Вопрос:

Я должен применить один и тот же триггер данных к нескольким элементам. Триггер данных — это

 <Style>
    <Style.Triggers>
        <DataTrigger Binding="{Binding ElementName=someButton, Path=IsChecked}" Value="False">
            <Setter Property="UIElement.Visibility" Value="Collapsed" />
        </DataTrigger>
    </Style.Triggers>
</Style>
  

Проблема в том, что мне приходится копировать его для каждой метки, текстового поля, флажка, кнопки и т.д., Которые я хочу свернуть / показать, и это одна кнопка, а конечный макет довольно сложный, со многими кнопками, так что, есть ли лучший способ (что-то вроде класса и т.д.)

Также триггер отлично работает с такими элементами, как кнопки и т.д., Но он не работает ни для каких панелей, док-панели, сетки, холста и т.д. Есть идеи?

Использование .NET 4.0, Visual Studio 2010 express.

Ответ №1:

Я думаю, первый вопрос заключается в том, почему это DataTrigger в первую очередь. Используя BooleanToVisibilityConverter , вы можете привязываться Visibility непосредственно к IsChecked свойству.

Помимо этого, вы можете существенно очистить ситуацию, сделав IsChecked двустороннюю привязку к свойству viewmodel, например AreControlsVisible . Тогда все остальные элементы управления могут просто иметь Visibility="{Binding AreControlsVisible…

Другой вариант — сделать этот стиль ресурсом и применить его ко всем соответствующим элементам.

Комментарии:

1. Можете ли вы предоставить небольшой фрагмент о том, как это сделать? Спасибо!

2. Другим вариантом было бы применить привязку видимости один раз к родительскому элементу всех элементов управления, а не по отдельности ко всем элементам управления.

3. Спасибо, сработало супер круто! Вот пример: rhyous.com/2011/02/22/binding-visibility-to-a-bool-value-in-wpf