Вам нужно указать триггер как часть стиля - коллекция триггеров на самой кнопке может содержать только триггеры событий. Имея это в виду, DataTrigger отлично работает. Тем не менее, есть морщина: значение из Set Trigger Setter не будет перезаписывать локальное свойство Content. Таким образом, вы также должны установить контент по умолчанию в стиле. Вот как это выглядит:
<Button> <!-- Note no content set directly on button -->
<Button.Style>
<Style TargetType="Button">
<Setter Property="Content" Value="You may write!!!" /> <!-- Here is the 'normal' content -->
<Style.Triggers>
<!-- Here is how we bind to another control's property -->
<DataTrigger Binding="{Binding IsReadOnly, ElementName=textBox}" Value="True">
<Setter Property="Content" Value="NO NO NO" /> <!-- Here is the 'override' content -->
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
Ah ha! Я знал, что есть приоритет собственности, но мне не приходило в голову, что прямая перезаписывает действие триггера. Я использую DP как источник привязки и в итоге оказался с таким же отсутствием поведения, как попытка использовать ElementName, поэтому проблема была на самом деле с вероятностью свойства. Спасибо, что поняли! – rrhartjr
это очень приятно. просто то, что мне было нужно, я почти собирался закодировать конвертер. но это лучше. – user1841243
> Однако есть морщина: значение из Set Trigger Setter не будет перезаписывать локальное свойство Content. Это важно! Я пропустил это в первый раз, когда прочитал этот ответ. – SteveP