2012-02-02 193 views
7

我想將WPF按鈕的形狀從默認的圓形矩形更改爲另一個形狀(比如箭頭),但我想保留樣式的其餘部分 - 填充顏​​色,邊框顏色,懸停狀態等。我希望按鈕具有與所有其他常規按鈕相同的樣式(我相信這取決於Windows的版本,系統主題顏色等,所以它不像我可以重新創建從頭開始的按鈕樣式和硬編碼正確的顏色)。更改WPF按鈕的形狀而不更改其他樣式

有沒有辦法做到這一點?

回答

0

製作default Button Template的副本,只需將默認面板更改爲您自定義的形狀即可。

在按鈕的情況下,它看起來像你需要用定義箭頭的Path之類的東西替換Border

由於Path沒有內容,因此您可能必須將形狀和內容放在另一個允許對象重疊的面板中,例如網格。

所以你的最終結果將是這個樣子

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

,而不是默認

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

如何獲得「默認按鈕模板」?您鏈接到的MSDN文章有一個* sample *模板,但它不是默認的。 – 2012-02-04 01:55:13

+1

@HenryJackson我認爲這是除了顏色以外的默認設置。默認情況下,它從'SystemColors'拉取顏色。另一種方法是在Expression Blend中製作模板的副本。 – Rachel 2012-02-04 16:24:57

1

你應該能夠繼承正常的按鈕控制。然後,您可以使用自定義形狀自定義子類按鈕,但所有其他屬性都將被繼承。這將允許你改變你的按鈕的形狀,沒有別的。

下面是創建一個自定義按鈕一個很好的資源,如果你有混合:
http://msdn.microsoft.com/en-us/library/bb613598.aspx

+0

你能舉一個例子來說明如何重寫邊界嗎? MSDN文章展示瞭如何在Blend中從頭開始創建一個主題,這並不是我想要的。 – 2012-02-04 01:58:13

0

如果要繼承了Button系統默認的顏色/樣式,你可以在按鈕Template內使用TemplateBinding秒。例如,如果你想創建一個自定義形狀的按鈕有相同的背景色系統中的一個,你可以使用下面:

<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> 

Ellipse會再從Button繼承背景顏色,但它被設置。

+0

這確實得到了背景顏色,但它不過是一個圓圈。沒有邊框,沒有懸停或點擊狀態,對內容沒有漸變光澤。我試圖避免從頭開始製作一個完整的按鈕。 – 2012-02-02 22:10:16