2010-07-07 33 views
8

Tôi có một điều khiển tab và khi người dùng muốn thêm vào nó, sau đó tôi muốn sao chép một vài phần tử đã tồn tại (không chỉ tham chiếu đến chúng). Bây giờ, cho đến nay tôi đã chỉ cần sao chép các biến tôi muốn. Nhưng tôi đã đến một cropper trong mã định cỡ tự động - đó là, phần tử được sao chép đáng chú ý nằm phía sau bản gốc khi thay đổi kích thước cửa sổ. Ngoài ra, không thể sao chép từng phần tử mà tôi cần sao chép khi danh sách đó tăng lên. Có một số phương pháp tôi có thể sử dụng mà sẽ sao chép một điều khiển WPF? Ngay bây giờ, đó chỉ là một hộp văn bản và một mục tab.Sao chép một điều khiển WPF theo lập trình

Trả lời

10

Tôi có thể không hiểu câu hỏi của bạn, nhưng bạn có thể tạo UserControl tùy chỉnh và bất cứ khi nào bạn cần thêm điều khiển mới, chỉ cần tạo một phiên bản mới của điều khiển đó và thêm nó vào cảnh của bạn, theo cách này bạn có thể sử dụng DataContext 's để giúp đỡ với các ràng buộc dữ liệu mà bạn có thể sử dụng từ sự kiểm soát sao chép của bạn:

MyControl newControl = new MyControl { DataContext = controlToCopy.DataContext }; 
myGrid.Children.Add(newControl); 

hoặc tương tự ...

hoặc làm bạn cần nó để được nhiều hơn năng động hơn?

+0

Chuyển đổi DataContext đã làm các trick. Cảm ơn! – Puppy

11

tôi không thể khá cho biết những gì nó là bạn đang cố gắng làm nhưng nếu bạn muốn có một ví dụ mới giống với một thể kiểm soát hiện tại bạn có thể sử dụng XamlWriter và XamlReader serialize/deserialize điều khiển:

MyControl copy = XamlReader.Parse(XamlWriter.Save(controlInstance)) as MyControl; 
+2

Đây là giải pháp tốt nhưng sẽ yêu cầu nhiều tùy chỉnh (trong trường hợp bạn sử dụng liên kết, StaticResources, X: Tên thuộc tính vv- Vì vậy, bạn phải xử lý các vấn đề được đề cập trong các bài viết này Giới hạn tuần tự của XamlWriter.Save [ http://msdn.microsoft.com/en-us/library/ms754193.aspx] Được viết bởi XamlWriter [ http://blogs.msdn.com/b/mikehillberg/archive/2006/09/16 /xamlwriter.aspx] – akjoshi

+0

các liên kết đó đã chết: ( – JobaDiniz

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