2011-07-17 3 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> 

와 컨트롤의 색상을 변경, 나는 프로그래밍, Iv'e이 Backgroup 속성을 변경하려고 색상을 변경하려면 그러나 아무 소용이 없습니다.WPF는 : 프로그램의 스타일로이 HexagonButton이있는 사용자 정의 스타일 나는 버튼이

내가 할 수 있었던 유일한 방법은 새로운 그림 이미지를 사용하여 완전히 새로운 스타일을 만드는 것입니다. 을 입력하고 할당하십시오. 그러나 나는 그렇게 쉬운 방법이 있다고 확신한다.

답변

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 : Type Button} 대신'RelativeSource TemplatedParent' (또는'TemplateBinding')를 사용해보십시오. –

1

육각형 주변의 배경을 변경하려면 ControlTemplateGridBackground="{TemplateBinding Background}"을 추가하십시오.

육각형 내부의 배경색도 변경하려면 GeometryDrawingBrushTransparent으로 변경하십시오.

관련 문제