Я не думаю, что есть простой способ избавиться от этой Белой Границы.Фактическая вызываемая подпрограмма - DrawInnerBorder, и она вызывается из OnRender в 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);
}
}
}
Как мы видим, нет свойства отключить это.Вы можете проверить это, установив IsEnabled="False"
и RoundCorners="False"
на ButtonChrome или установив Width или Height на что-то вроде 3,99, и «Белая граница» исчезнет.* Чтобы отключить внутреннюю границу ButtonChrome, вы можете создать свой собственный ButtonChrome, который добавляет это свойство.К сожалению, ButtonChrome запечатан, поэтому мы не можем наследовать его.Я попытался скопировать весь класс и добавить свойство DisableInnerBorder, и это, кажется, работает.Вы можете использовать его следующим образом:
<local:MyButtonChrome ...
DisableInnerBorder="True">
Кроме того, он работает так же, как обычный ButtonChrome, и вы также можете добавлять другие свойства и т. Д.У этого метода могут быть недостатки, о которых я не задумывался, но для небольшого теста он работал просто отлично.
По-видимому, 937 строк кода было слишком много для размещения на SO :) Я загрузил MyButtonChrome.cs здесь: http://www.mediafire.com/?wnra4qj4qt07wn6