2010-01-27 35 views
8

Giả sử chúng tôi có một 'XAML dài' ControlTemplate cho Control của chúng tôi. Và chúng tôi muốn để thêm chỉ 1 Nút vào Mẫu. MSDN tuyên bố rằng 'Không có cách nào để thay thế chỉ một phần của cây trực quan của điều khiển'. Tôi có thực sự phải sao chép tất cả ControlTemplate đó và thêm Nút của tôi vào đó không?WPF ControlTemplate thay thế một phần

Hoặc: Có khả năng nào để cung cấp một số loại giao diện cho một yếu tố cụ thể không? Ví dụ: một TextBox, để mọi người có thể dễ dàng lấy mẫu nó, mà không cần phải gặt hái toàn bộ ControlTemplate.

Cảm ơn!

+0

Tại sao không chỉ, oh, tôi không ... thêm nút vào mẫu? – Will

+0

Bởi vì giải pháp sử dụng Điều khiển đó và mọi dự án sẽ quyết định những Nút cần thêm –

Trả lời

7

Như qntmfred đã nói, bạn không thể thực hiện việc này trực tiếp. Tuy nhiên, nếu bạn sở hữu điều khiển mà bạn muốn tùy chỉnh (có vẻ như bạn làm), thì bạn có thể làm điều này bằng cách thêm các thuộc tính tùy chỉnh phù hợp, chẳng hạn như thuộc tính CustomButtons (mà mỗi người dùng của điều khiển có thể thêm các nút riêng của họ vào) hoặc thuộc tính ExtensionContent (mà mỗi người dùng của điều khiển có thể đặt thành bất kỳ nội dung nào họ muốn - để trống, thêm một điều khiển hoặc thêm bảng điều khiển với nhiều thứ họ muốn trên đó). ControlTemplate của bạn sẽ chỉ định không có ngữ nghĩa cho các thuộc tính này, nhưng chỉ lưu trữ chúng khi chúng được trao cho nó. Ví dụ: giả sử bạn đã cung cấp thuộc tính ExtensionContent. ControlTemplate của bạn có thể trình bày này sử dụng một ContentPresenter:

<ContentPresenter ContentSource="ExtensionContent" /> 

Và người dùng của bạn có thể đặt bất cứ điều gì họ muốn trong nó:

<s:StefansControl> 
    <s:StefansControl.ExtensionContent> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="I'm custom content" /> 
     <Button Click="DoSomethingSurprising_Click">Click me</Button> 
     <Image Source="something.jpg" /> 
    </StackPanel> 
    </s:StefansControl.ExtensionContent> 
</s:StefansControl> 

thể khác là cung cấp tính Phong cách mà bạn áp dụng cho các bộ phận kiểm soát của bạn để người dùng có thể tạo kiểu cho họ (bao gồm việc thay đổi mẫu của rằng một phần (chỉ) của điều khiển) mà không thay thế toàn bộ kiểu/mẫu. Đây là loại ý tưởng "giao diện cho một yếu tố cụ thể" của bạn, ví dụ: cung cấp thuộc tính FooBoxStyle được áp dụng cho Hộp văn bản "foo".

Tóm lại, ý tưởng là xây dựng một số đo "khả năng tái tạo một phần nhất định" vào mẫu cơ bản - cho dù bằng cách sử dụng nội dung, kiểu, mẫu hoặc kết hợp các loại này. WPF không cung cấp khái niệm chung về "thay thế một phần", nhưng bạn có thể cung cấp khái niệm riêng về khả năng thay thế một phần của riêng bạn miễn là bạn có thể dự đoán loại thay thế một phần nào có thể được yêu cầu.

0

MSDN là chính xác. Phải sao chép toàn bộ ControlTemplate.

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