2012-02-02 18 views
7

デフォルトの丸い四角形から別の形状(矢印など)にWPFボタンの形状を変更したいと思いますが、残りのスタイルを保持したい - 色、枠線の色、ホバーの状態などを塗りつぶします。私はボタンが他のすべての通常のボタンと同じスタイルを持つようにします(Windowsのバージョン、システムのテーマの色などに依存すると思いますので、ボタンのスタイルはゼロから、適切な色はハードコード)。他のスタイルを変更せずにWPFボタンの形状を変更する

これを実行する方法はありますか?

答えて

0

default Button Templateのコピーを作成し、デフォルトパネルを独自のカスタムシェイプに変更するだけです。

ボタンの場合、Borderを矢印を定義するPathのように置き換える必要があるようです。

Pathにはコンテンツがないので、オブジェクトの重なりを可能にする別のパネル(グリッドなど)に図形とコンテンツの両方を配置する必要があります。

だからあなたの最終結果ではなく、あなたは、通常のボタンコントロールをサブクラス化することができるはずデフォルト

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

「デフォルトのボタンテンプレート」を取得するにはどうすればよいですか?リンク先のMSDN記事には*サンプル*テンプレートがありますが、デフォルトのテンプレートではありません。 –

+1

@HenryJackson私はそれが色以外のデフォルトのものだと思います。デフォルトでは 'SystemColors'から色を引きます。別の方法として、Expression Blendでテンプレートのコピーを作成する方法があります。 – Rachel

1

のこの

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

ようになります。カスタムシェイプでサブクラス化されたボタンをカスタマイズできますが、他のすべてのプロパティは継承されます。これにより、ボタンの形状を変更することができます。あなたはボタンTemplateTemplateBinding Sを使用することができますButtonのデフォルトのシステムカラー/スタイルを継承させたい場合は
http://msdn.microsoft.com/en-us/library/bb613598.aspx

+0

境界をオーバーライドする方法の例を教えていただけますか? MSDNの記事では、ブレンドでゼロからテーマを作成する方法を示していますが、これは私がやりたいことではありません。 –

0

:あなたはブレンドを持っている場合、ここで

は、カスタムボタンを作成するための優れたリソースです。しかし、

<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

これは背景色を正しく取得しますが、そうでなければ単なる円です。境界線はなく、ホバーやクリック状態はなく、コンテンツ上にグラデーションの光沢はありません。私は一からボタン全体を作るのを避けようとしています。 –

関連する問題