No se puede cambiar Button.Content en XAML

Quiero cambiar el contenido de un botón en XAML usando un DataTrigger. Condicionalmente necesito cambiar el texto del botón. Sin embargo, si el Botón inicialmente tiene un texto, el texto no se cambia. La única manera de hacer que funcione es no establecer Content, o configúrelo con un disparador.

Entonces si tengo

<Button Content="Some text" />

el gatillo no cambia el texto del botón.

Si tengo

<Button />

or

<Button>
    <Button.Style>
        <Style TargetType="Button">
            <Setter Property="Content" Value="Some text" />
        </Style>
    </Button.Style>
</Button>

el gatillo funciona.

¿Por qué?

preguntado el 12 de junio de 12 a las 18:06

1 Respuestas

Esto se debe a la precedencia de DepedencyProperty. mira aquí: http://msdn.microsoft.com/en-us/library/ms743230.aspx

Los valores locales tienen un orden de precedencia más alto que los disparadores. Esto significa que el valor local "tendrá prioridad" sobre el valor de activación

Cuando lo establece en el estilo, cambia la precedencia. Un Trigger tiene prioridad sobre un Style Setter y es por eso que funciona como esperas.

Respondido el 12 de junio de 12 a las 18:06

Entonces, ¿siempre debo configurar el texto inicial con un disparador si quiero cambiarlo más tarde, o hay otra forma (mejor) de cambiar el texto del botón después de configurarlo con un valor local? - net_prog

Cambiar el texto en un activador es un poco extraño en general, pero si debe hacerlo, me gusta crear un estilo reutilizable para ello. Luego establezca el texto predeterminado en un configurador de estilo y haga que el estilo contenga el activador que modifica el texto. Esto deja en claro lo que está sucediendo en mi opinión. - brad cunningham

Configuro el texto del botón según el estado del objeto, se edita en un cuadro de diálogo, si el objeto no está suspendido, el botón escribe "Suspender", si está suspendido, escribe "Reanudar". Uso un estilo con un disparador en XAML. ya que creo que esta es la responsabilidad de una Vista para establecer el texto del botón. - net_prog

También puede vincular el contenido del botón a la propiedad suspendida y luego escribir un IValueConverter que convierta el valor de la propiedad suspendida en el valor de contenido del botón correcto. Esto es más o menos para lo que están los convertidores. - brad cunningham

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.