2017-02-20 50 views
1

我試圖設計一個WPF按鈕,使其具有圓角和黑色邊框。繼多個例子在網上,我想出了以下樣式:WPF按鈕造型時無法移除奇怪的「邊框」

<Style x:Key="MyBlackButton" TargetType="{x:Type Button}"> 
    <Setter Property="Background" Value="#FF282828"/> 
    <Setter Property="Foreground" Value="White"/> 
    <Setter Property="FontSize" Value="16"/> 
    <Setter Property="FontWeight" Value="Bold"/> 
    <Setter Property="Height" Value="40"/> 
    <Setter Property="OverridesDefaultStyle" Value="true" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Grid x:Name="ButtonGrid"> 
        <Border CornerRadius="5" BorderBrush="Black" BorderThickness="1" Background="{TemplateBinding Background}"> 
         <Grid Margin="10,0,10,2"> 
          <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0"/> 
         </Grid> 
        </Border> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<Button Content="My button" Style="{StaticResource MyBlackButton}" /> 

這幾乎看起來不錯,但不是在按鈕的頂部和底部顯示正確的邊界,你可以從下面的變焦上看到實際的按鈕:

enter image description here

要嘗試找出我增加了一個更厚的邊框,看看是否有任何變化的問題。正如你可以在下圖中看到有一種「邊框」按鈕裏面的:

enter image description here

用細邊框

所以,邊框看起來在按鈕的頂部和底部的模糊,並與一個很厚的邊框可以看到內邊框(我猜在薄邊框的頂部可以看到它,看起來很模糊)。

這是怎麼回事?爲什麼我無法在按鈕周圍找到漂亮的邊框?

+0

'UseLayoutRounding = 「真」''&& SnapsToDevicePixels = 「真」' – dymanoid

+0

添加這兩個屬性到風格(作爲setter)的幫助相當多,但不完全。看看這張圖片,你可以看到上邊框仍然不是一條黑線:http://i.imgur.com/KdoMMur.png – GTHvidsten

回答

0

這是造成這種情況的抗鋸齒。

嘗試在您的按鈕設置

RenderOptions.EdgeMode="Aliased" 

+0

這不會使圓角邊緣變成鋸齒狀嗎? (現在還不能測試) – GTHvidsten

+0

是的! 您需要選擇一個 - 消除鋸齒的平滑邊框,放大時看起來不太完美,或者放大時鋸齒邊框非常完美,但通常看起來更加鋸齒。我不認爲你可以雙方都有。 就我個人而言,我認爲你最初發布的例子在正常的縮放級別看起來很好。使用深灰色很難分辨,但如果將背景設置爲紅色,則黑色1px邊框看起來很好。 –

0

嘗試此

文體= 「{StaticResource的{X:靜態ToolBar.ButtonStyleKey}}」>

+0

在哪個元素上? – GTHvidsten