2012-02-02 118 views
7

Tôi muốn thay đổi hình dạng của nút WPF từ hình chữ nhật tròn mặc định sang hình dạng khác (nói, mũi tên), nhưng tôi muốn giữ phần còn lại của kiểu dáng - Tôi muốn nút có cùng kiểu với tất cả các nút thông thường khác (mà tôi tin rằng phụ thuộc vào phiên bản Windows, màu chủ đề hệ thống, v.v. vì vậy nó không giống như tôi có thể tạo lại phong cách nút từ đầu và mã cứng màu sắc phù hợp).Thay đổi hình dạng của nút WPF mà không thay đổi các kiểu khác

Có cách nào để làm điều đó không?

Trả lời

0

Tạo bản sao của default Button Template và chỉ cần thay đổi bảng mặc định thành hình dạng tùy chỉnh của riêng bạn.

Trong trường hợp của nút, có vẻ như bạn cần phải thay thế Border bằng thứ gì đó giống như một Path xác định Mũi tên.

Path không có nội dung, có thể bạn sẽ phải đặt cả hình dạng và nội dung trong một bảng điều khiển khác cho phép các đối tượng trùng lặp, chẳng hạn như Lưới.

Vì vậy, kết quả cuối cùng của bạn sẽ giống như thế này

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

thay vì mặc định

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

Làm cách nào để nhận "mẫu nút mặc định"? Bài viết MSDN bạn liên kết có mẫu * mẫu * nhưng không phải là mẫu mặc định. –

+1

@HenryJackson Tôi nghĩ rằng đó là một mặc định khác với màu sắc. Theo mặc định, nó kéo màu từ 'SystemColors'. Một cách khác là tạo một bản sao của mẫu trong Expression Blend. – Rachel

1

Bạn sẽ có thể phân lớp các nút điều khiển bình thường. Sau đó, bạn có thể tùy chỉnh nút được phân lớp bằng hình dạng tùy chỉnh, nhưng tất cả các thuộc tính khác sẽ được kế thừa. Điều này sẽ cho phép bạn thay đổi hình dạng cho nút của bạn và không có gì khác.

Dưới đây là một nguồn lực tốt cho việc tạo ra một nút tùy chỉnh nếu bạn có Blend:
http://msdn.microsoft.com/en-us/library/bb613598.aspx

+0

Bạn có thể cho tôi một ví dụ về cách ghi đè lên ranh giới không? Bài viết MSDN cho thấy làm thế nào để tạo ra một chủ đề từ đầu trong Blend, mà không phải là khá những gì tôi muốn làm. –

0

Nếu bạn muốn kế thừa hệ thống mặc định màu sắc/phong cách cho một Button bạn có thể sử dụng TemplateBinding s trong phạm vi nút Template. Ví dụ, nếu bạn muốn tạo ra một nút tùy chỉnh hình mà có màu nền giống như một hệ thống, bạn có thể sử dụng dưới đây:

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

Các Ellipse sau đó sẽ thừa hưởng màu nền từ Button, tuy nhiên nó được thiết lập.

+0

Điều này không có màu nền, nhưng nó chỉ là một vòng tròn. Không có đường viền, không có trạng thái di chuột hoặc nhấp chuột, không có độ bóng trên nội dung. Tôi đang cố gắng tránh làm một nút toàn bộ từ đầu. –

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