2010-01-09 47 views
14

Tôi làm việc trên dự án WPF nơi tôi đã kiểm soát quá mức điều khiển CheckBox đối với một số thao tác đặc biệt. Đó là hoạt động chính xác.Cách nhập Mẫu kiểm soát

Vấn đề của tôi là ControlTemplate được áp dụng từ chủ đề (shinyred.xaml từ codeplex), không được áp dụng cho kiểm soát quá mức của tôi. Có cách nào để kế thừa CheckBoxControlTemplate để kiểm soát mới của tôi sử dụng không?

Tất cả các mẫu mà tôi có thể tìm được tập trung vào kế thừa kiểu cho CheckBox, nhưng không có gì về số ControlTemplate.

Trả lời

17

Không, như bạn đã nói có thể 'kế thừa' một kiểu bằng cách sử dụng thuộc tính BasedOn, nhưng không thể trực tiếp 'kế thừa' mẫu. Điều này là dễ hiểu mặc dù, những gì sẽ là ngữ nghĩa của kế thừa mẫu? Làm thế nào các mẫu có nguồn gốc có thể bằng cách nào đó thêm hoặc thay đổi các yếu tố trong mẫu cơ sở?

Với kiểu hoàn toàn có thể, vì bạn có thể chỉ cần thêm Setters, Triggers, v.v. Điều duy nhất có thể tưởng tượng là có thể được thừa kế mẫu thêm Triggers vào mẫu cơ sở. Tuy nhiên, trong trường hợp đó, bạn phải có kiến ​​thức thân mật về các tên phần tử trong khuôn mẫu cơ sở, và một thay đổi tên phần tử trong khuôn mẫu cơ sở có thể phá vỡ phần tử gốc của bạn. Chưa kể đến một vấn đề với khả năng đọc, nơi bạn đề cập đến một tên trong mẫu có nguồn gốc của bạn, được định nghĩa ở một nơi khác hoàn toàn.

Bổ sung có liên quan Có nói tất cả điều đó, có thể giải quyết vấn đề cụ thể của bạn (mặc dù tôi nghi ngờ bây giờ nó vẫn là của bạn, hoặc thậm chí là một vấn đề). Bạn chỉ cần xác định kiểu cho điều khiển của mình bằng công cụ setter cho thuộc tính Template như sau:

<Style TargetType="<your type>"> 
    <Setter Property="Template" Value="{StaticResource <existing template resource name>}"/> 
</Style> 
Các vấn đề liên quan