Nie sądzę, istnieje łatwy sposób, aby pozbyć się tego białą obwódkę. Aktualnie wywoływaną procedurą jest DrawInnerBorder i wywoływana z OnRender w 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);
}
}
}
Jak widzimy, nie ma właściwość, aby wyłączyć tę funkcję. Możesz to sprawdzić, ustawiając IsEnabled="False"
i RoundCorners="False"
na ButtonChrome lub ustawiając Szerokość lub Wysokość na coś podobnego do 3.99 i "Biała ramka" znika.
Aktualizacja
Aby wyłączyć wewnętrzną granicę ButtonChrome można utworzyć własną ButtonChrome która dodaje tę właściwość. Niestety ButtonChrome jest zapieczętowany, więc nie możemy z niego odziedziczyć. Próbowałem skopiować całą klasę i dodać właściwość DisableInnerBorder i wydaje się, że działa.Można go używać jak to
<local:MyButtonChrome ...
DisableInnerBorder="True">
Inne niż to, że działa podobnie jak regularne ButtonChrome można także dodać inne właściwości itp, które można chcieć. Mogą być wady tej metody, o których nie myślałem, ale na mały test zadziałał dobrze.
apperently 937 linii kodu było zbyt wiele, aby odpowiedzieć na SO :) upload MyButtonChrome.cs tutaj: http://www.mediafire.com/?wnra4qj4qt07wn6
Jak uzyskać te kody? To mnie dziwi :) –
@Nam Gi VU: Użyłem reflektora .NET i dodałem zespół PresentationFramework.Aero do debugowania. Następnie przejrzałem procedury rysowania, aby dowiedzieć się, gdzie to zostało narysowane i sprawdziłem, czy jest jakiś sposób, aby je wyłączyć :) –
Dziękuję Meleak! O twojej sugestii użycia 'Border' zamiast' ButtonChrome', stracę cały efekt UI normalnego przycisku (przesuwając kursor myszy, wciśnięty, itd.) Czy masz jakieś obejście tego? –