Debe especificar el desencadenador como parte de un estilo: la colección Disparadores del botón solo puede contener activadores de eventos. Con eso en mente, un DataTrigger funciona bien. Sin embargo, hay una arruga: el valor del Trigger Setter no sobrescribirá una propiedad de contenido local. Por lo tanto, también debe establecer el contenido predeterminado en el estilo. Así es como se ve:
<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, ja! Sabía que había una prioridad de la propiedad, pero no se me ocurrió que el directo sobrescribiría la acción del disparador. Estoy usando un DP como fuente de enlace y terminé con la misma falta de comportamiento que al tratar de usar ElementName, por lo que el problema fue realmente con el precinto de la propiedad. ¡Gracias por aclarar eso! – rrhartjr
esto es muy bueno. justo lo que necesitaba, casi iba a codificar un convertidor. pero esto es más agradable. – user1841243
> Sin embargo, hay una arruga: el valor del Trigger Setter no sobrescribe una propiedad de contenido local. ¡Esto es importante! Lo extrañé la primera vez que leí esta respuesta. – SteveP