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

Tôi có một nút, có HexagonButton này như phong cách của mình, và tôi muốn thay đổi màu sắc của nó lập trình, Iv'e cố gắng thay đổi sở hữu Backgroup, nhưng không có kết quả.WPF: lập trình thay đổi màu sắc của một điều khiển với một phong cách tùy chỉnh

cách duy nhất tôi quản lý để làm như vậy, là tạo ra một phong cách hoàn toàn mới, với một hình ảnh Vẽ mới. và chỉ định. Nhưng tôi chắc chắn có một cách dễ dàng hơn để làm như vậy.

Trả lời

2

tôi đã nhận nó làm việc như bằng cách bao gồm các GeomteryDrawing trực tiếp trong Button mẫu, và sử dụng RelativeSource bindings vào ForegroundBackground thuộc tính của Button tổ tiên của mình (mà tôi gán giá trị mặc định trong khai báo kiểu):

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

nút mặc định màu trắng và đen là sau đó:

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

và một nút tùy chỉnh là:

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

Ghi chú nhỏ: hãy xem xét sử dụng 'RelativeSource TemplatedParent' (hoặc thậm chí' TemplateBinding') thay vì 'RelativeSource AncestorType = {x: Type Button}'. –

1

Nếu bạn chỉ muốn thay đổi nền sau hình lục giác, hãy thêm Background="{TemplateBinding Background}" vào Grid trong ControlTemplate.

Nếu bạn cũng muốn thay đổi màu nền của bên trong hình lục giác, hãy thay đổi Brush trong số GeometryDrawing thành Transparent.

Các vấn đề liên quan