2011-07-17 8 views
5
<DrawingImage x:Key="HexagonImage"> 
    <DrawingImage.Drawing> 
     <DrawingGroup> 
      <GeometryDrawing Brush="White" 
         Geometry="M 250,0 L 750,0 L 1000,433 L 750,866 L 250,866 L 0,433 Z"> 
       <GeometryDrawing.Pen> 
        <Pen Brush="Black" Thickness="10" LineJoin="Round"/> 
       </GeometryDrawing.Pen> 
      </GeometryDrawing> 
     </DrawingGroup> 
    </DrawingImage.Drawing> 
</DrawingImage> 

<Style x:Key="HexagonButton" TargetType="{x:Type Button}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
     <ControlTemplate TargetType="{x:Type Button}"> 
      <Grid> 
       <Image x:Name="hexImg" Source="{StaticResource HexagonImage}"/> 
       <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/> 
      </Grid> 
     </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

とコントロールの色を変更しかし役に立たない。WPF:プログラムで、私はそのスタイルとしてこのHexagonButtonを持っているボタンを、持っている、と私はプログラム的に、Iv'eはBackgroupプロパティを変更しようとした その色を変更したいカスタムスタイル

私がそうした唯一のやり方は、新しいDrawingイメージを使って全く新しいスタイルを作成することです。 と割り当ててください。しかし、私は確かにそうする簡単な方法があります。

答えて

2

私はButtonテンプレートで直接GeomteryDrawingを含めて、(これに私はスタイル宣言ではデフォルトで割り当てられた)そのButton祖先のForegroundBackgroundプロパティにRelativeSourceバインディングを使用してのように動作するようにそれを得た:

<Style x:Key="HexagonButton" TargetType="{x:Type Button}"> 
    <Setter Property="Background" Value="White" /> 
    <Setter Property="Foreground" Value="Black" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Grid> 
        <Image x:Name="hexImg"> 
         <Image.Source> 
          <DrawingImage> 
           <DrawingImage.Drawing> 
            <DrawingGroup> 
             <GeometryDrawing Brush="{Binding RelativeSource={RelativeSource AncestorType={x:Type Button}}, Path=Background}" Geometry="M 250,0 L 750,0 L 1000,433 L 750,866 L 250,866 L 0,433 Z"> 
              <GeometryDrawing.Pen> 
               <Pen Brush="{Binding RelativeSource={RelativeSource AncestorType={x:Type Button}}, Path=Foreground}" Thickness="10" LineJoin="Round" /> 
              </GeometryDrawing.Pen> 
             </GeometryDrawing> 
            </DrawingGroup> 
           </DrawingImage.Drawing> 
          </DrawingImage> 
         </Image.Source> 
        </Image> 
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" /> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

デフォルト白と黒のボタンは次のようになります。

<Button Style="{StaticResource HexagonButton}">Click me</Button> 

とカスタムボタンがある:

<Button Style="{StaticResource HexagonButton}" Background="Yellow" Foreground="Red">Click me</Button> 
+1

小さなメモ:RelativeSource AncestorType = {x:タイプボタン}の代わりに 'RelativeSource TemplatedParent'(あるいは' TemplateBinding')を使ってみてください。 –

1

バックグラウンドを六角形の周りでのみ変更する場合は、ControlTemplateGridBackground="{TemplateBinding Background}"を追加します。

また、六角形の内側の背景色を変更する場合は、GeometryDrawingBrushTransparentに変更します。

関連する問題