Musisz określić wyzwalacz jako część stylu - kolekcja Triggers na samym przycisku może zawierać tylko wyzwalacze zdarzeń. Mając to na uwadze, DataTrigger działa dobrze. Istnieje jednak zmarszczka: wartość z ustawiacza wyzwalaczy nie zastąpi lokalnej właściwości treści. Więc musisz ustawić domyślną treść również w stylu. Oto jak to wygląda:
<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! Wiedziałem, że istnieje precedens własności, ale nie przyszło mi do głowy, że bezpośrednie nadpisałoby działanie wyzwalacza. Używam DP jako źródła wiążącego i zakończyłem z takim samym brakiem zachowania, jak próba użycia ElementName, więc problem był związany z prekondencją właściwości. Dzięki za wyczyszczenie tego! – rrhartjr
to jest bardzo miłe. właśnie to, czego potrzebowałem, prawie zamierzałem zakodować konwerter. ale jest ładniej. – user1841243
> Istnieje jednak zmarszczka: wartość z ustawiacza wyzwalaczy nie zastąpi lokalnej właściwości Treści. To jest ważne! Tęskniłem za pierwszym razem, gdy czytałem tę odpowiedź. – SteveP