#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