2012-02-02 24 views
7

Me gustaría cambiar la forma de un botón WPF del rectángulo redondo predeterminado a otra forma (por ejemplo, una flecha), pero quiero mantener el resto del diseño - color de relleno, color de borde, estados de desplazamiento, etc. Quiero que el botón tenga los mismos estilos que todos los demás botones normales (que creo que depende de la versión de Windows, colores de tema del sistema, etc.), así que no puedo recrear el estilo del botón desde cero y el código duro los colores correctos).Cambiar la forma del botón WPF sin cambiar otros estilos

¿Hay alguna manera de hacerlo?

Respuesta

0

Haga una copia del default Button Template, y simplemente cambie el panel predeterminado a su propia forma personalizada.

En el caso del botón, parece que es necesario sustituir la Border con algo así como un Path definir una flecha.

Dado que Path no tiene contenido, probablemente tendrá que poner la forma y el contenido en otro panel que permita que los objetos se superpongan, como una cuadrícula.

Por lo que su resultado final se verá algo como esto

<Grid> 
    <Path /> 
    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" /> 
</Grid> 

en lugar del predeterminado

<Button> 
    <ContentPresenter /> 
</Button> 
+1

¿Cómo obtengo la "plantilla de botón predeterminada"? El artículo de MSDN al que se vincula tiene una plantilla * sample *, pero no es la predeterminada. –

+1

@HenryJackson Creo que es el predeterminado que no sean los colores. Por defecto, extrae colores de 'SystemColors'. Otra alternativa es hacer una copia de la plantilla en Expression Blend. – Rachel

1

Usted debe ser capaz de subclase el botón de control normal. Luego puede personalizar el botón subclasificado con una forma personalizada, pero todas las demás propiedades se heredarán. Esto le permitiría cambiar la forma de su botón y nada más.

Aquí es un buen recurso para crear un botón personalizado si tiene Blend:
http://msdn.microsoft.com/en-us/library/bb613598.aspx

+0

¿Puede darme un ejemplo de cómo anular solo el límite? El artículo de MSDN muestra cómo crear un tema desde cero en Blend, que no es exactamente lo que quiero hacer. –

0

Si desea heredar el sistema por defecto colores/estilos para un Button puede utilizar TemplateBinding s en el botón Template. Por ejemplo, si desea crear un botón en forma personalizada que tenía el mismo color de fondo como el sistema, puede utilizar el siguiente:

<Button> 
    <Button.Template> 
     <ControlTemplate TargetType="Button"> 
      <Grid> 
       <!-- circle to have inherited colour --> 
       <Ellipse Fill="{TemplateBinding Background}" Height="50" Width="50" /> 
       <ContentPresenter /> 
      </Grid> 
     </ControlTemplate> 
    </Button.Template> 
</Button> 

El Ellipse A continuación, heredar el color de fondo de la Button, sin embargo esta organizado.

+0

Esto capta correctamente el color de fondo, pero de lo contrario solo es un círculo. No hay bordes, no se pasa el cursor ni se hace clic en estados, no se aplica un degradado brillante sobre el contenido. Estoy tratando de evitar hacer un botón completo desde cero. –

Cuestiones relacionadas