No creo que hay una manera fácil de deshacerse de esa frontera blanca. La rutina real que se llama es DrawInnerBorder y se llama desde dentro de OnRender en ButtonChrome.
protected override void OnRender(DrawingContext drawingContext)
{
Rect bounds = new Rect(0.0, 0.0, base.ActualWidth, base.ActualHeight);
this.DrawBackground(drawingContext, ref bounds);
this.DrawDropShadows(drawingContext, ref bounds);
this.DrawBorder(drawingContext, ref bounds);
// This one draws the white Rectangle
this.DrawInnerBorder(drawingContext, ref bounds);
}
private void DrawInnerBorder(DrawingContext dc, ref Rect bounds)
{
if ((base.IsEnabled || this.RoundCorners) && ((bounds.Width >= 4.0) && (bounds.Height >= 4.0)))
{
Pen innerBorderPen = this.InnerBorderPen;
if (innerBorderPen != null)
{
dc.DrawRoundedRectangle(null, innerBorderPen, new Rect(bounds.Left + 1.5, bounds.Top + 1.5, bounds.Width - 3.0, bounds.Height - 3.0), 1.75, 1.75);
}
}
}
Como podemos ver, no hay ninguna propiedad para desactivar esta. Puede verificarlo configurando IsEnabled="False"
y RoundCorners="False"
en ButtonChrome o estableciendo Ancho o Alto a algo así como 3.99 y el "Borde blanco" desaparece.
actualización
Para deshabilitar el borde interior del ButtonChrome puede crear su propio ButtonChrome que añade esta propiedad. Desafortunadamente ButtonChrome está sellado por lo que no podemos heredar de él. Traté de copiar toda la clase y agregar la propiedad DisableInnerBorder y parece estar funcionando.Se puede utilizar de esta manera
<local:MyButtonChrome ...
DisableInnerBorder="True">
Aparte de eso, funciona igual que el ButtonChrome regular y también se pueden añadir otras propiedades, etc., que es posible que desee. Puede haber inconvenientes en este método que no he pensado, pero para una pequeña prueba funcionó bien.
Apperently 937 líneas de código era demasiado poder escribir en el SO :) Me subido MyButtonChrome.cs aquí: http://www.mediafire.com/?wnra4qj4qt07wn6
¿Cómo puede obtener estos códigos? Me sorprende :) –
@Nam Gi VU: utilicé .NET Reflector y agregué el ensamblado PresentationFramework.Aero para depurar. Luego, pasé por las rutinas de dibujo para ver dónde se dibujaba esto y verifiqué si había alguna manera de desactivarlo :) –
Gracias Meleak! Acerca de su sugerencia de usar 'Border' en lugar de' ButtonChrome', voy a perder todo el efecto UI de un botón normal (el mouse sobre, presionado, etc.) ¿Tiene alguna solución para eso? –