Creación de una plantilla de botón

Estoy tratando de crear una plantilla para un botón que pueda usar una y otra vez en un formulario.

La Button, quiero que contenga un Grid con dos filas y un texto personalizado dentro de la fila inferior.

Esto es lo que tengo hasta ahora, pero no creo que sea correcto porque quiero configurar el texto desde dentro del elemento del botón.

<ControlTemplate TargetType="Control">
    <Grid Width="444">
        <Grid.RowDefinitions>
            <RowDefinition Height="51" />
            <RowDefinition Height="36" />
        </Grid.RowDefinitions>
        <Grid Grid.Row="0" Background="#286c97"></Grid>
        <Grid Grid.Row="1" Background="#5898c0">
            <TextBlock Grid.Row="1" FontFamily="Segoe UI" FontSize="12" Text="{TemplateBinding Content}" />
        </Grid>
    </Grid>
</ControlTemplate>

Luego, para llamar a la plantilla que esperaba poder ir:

<Button Content="This is the text" />

Pero lamentablemente esto no funciona. ¿Hay alguna otra plantilla que se supone que debo usar para pasarle el valor del texto?

preguntado el 22 de mayo de 12 a las 17:05

1 Respuestas

Para hacerlo funcionar, hay un control llamado ContentPresenter. Colócalo dentro de tu plantilla donde quieras que esté. Pero recuerda que podría ser cualquier cosa, un texto, una imagen o un montón de otros controles, y tu Button ni su ControlTemplate, no debería importarle lo que es.

ControlTemplate TargetType="Control">
    <Grid Width="444">
        <Grid.RowDefinitions>
            <RowDefinition Height="51" />
            <RowDefinition Height="36" />
        </Grid.RowDefinitions>
        <Grid Grid.Row="0" Background="#286c97"></Grid>
        <Grid Grid.Row="1" Background="#5898c0">
            <ContentPresenter/>
        </Grid>
    </Grid>
</ControlTemplate>

La ContentPresenter, cuando se usa dentro de un ContentControl, como el botón, se adjunta automáticamente a la Content, ContentTemplate y ContentTemplateSelector propiedades del padre con plantilla.

Ahora, si desea mostrar más que solo texto, o desea personalizar más el texto, simplemente pase un DataTemplate como tu ContentTemplate directamente al botón específico.

<DataTemplate x:Key="myButtonContentTemplate">
    <TextBlock FontSize="18" Text="{Binding}"/>
</DataTemplate>

<Button ContentTemplate="{StaticResource myButtonContentTemplate}"/>

contestado el 22 de mayo de 12 a las 18:05

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