2012-01-30 26 views
6

Trong một ứng dụng WPF Tôi muốn di chuyển một UserControl từ một ContentControl với nhau trong mã:Di chuyển một UserControl từ một ContentControl với nhau theo chương trình

myContentControl2.Content = myUserControl; 

trong trường hợp này tôi nhận được một lỗi:
Phần tử được chỉ định đã là con logic của một phần tử khác. Ngắt kết nối nó trước.

Trong một ControlControl class description tôi có thể nhìn thấy một RemoveVisualChild method, nhưng khi tôi cố gắng sử dụng nó trong mã tôi nhận được một Unknown phương pháp lỗi

myContentControl1.RemoveVisualChild(myUserControl);//here I get an "Unknown method" error 

Tôi đang ở đâu vậy?
Làm cách nào để di chuyển UserControl từ một ContentControl sang một mã khác trong mã sau?

+0

Cập nhật câu trả lời – Maheep

+0

@Maheep: vâng, với những gì tôi đã trả lời. – Clemens

+0

@Clemens: Yep. Những gì tôi đã cập nhật giống như câu trả lời của bạn. Nhưng tôi đã thử giải pháp một cách độc lập và cập nhật. Tôi Ok với câu trả lời của bạn là chấp nhận một. Nhưng hạnh phúc về tôi cũng học được nó. – Maheep

Trả lời

2

Set

myContentControl1.Content = null; 

để loại bỏ myUserControl từ myContentControl1 trước khi thiết

myContentControl2.Content = myUserControl; 

Bằng cách này, đừng nhầm lẫn giữa cây logic với cây thị giác. Nhận thêm thông tin trong Trees in WPF trong MSDN.

+0

Có, nó hoạt động, cảm ơn bạn! Và ghi chú của bạn về cây cũng hữu ích, +1 – rem

1

In a ControlControl class description I can see a RemoveVisualChild method, but when I try to use it in code I get an Unknown method error

Điều này là do RemoveVisualChild và RemoveLogicalChild được bảo vệ phương pháp mà bạn không thể truy cập trong lớp học của bạn trực tiếp. Nếu bạn muốn sử dụng phương thức này thì hãy tạo một lớp dẫn xuất từ ​​ContentControl và hiển thị các phương thức này bằng cách sử dụng một số trình bao bọc phương thức công khai trong lớp đó.

Tùy chọn tốt hơn là xóa myUserControl từ cây lôgic của myContentControl1 trước khi thêm cây logic hợp lý của một số điều khiển khác. Để đạt được điều này, bạn có thể đặt thuộc tính Content của myContentControl1 thành nội dung khác hoặc tới null.

+1

Cảm ơn bạn đã làm rõ về cách sử dụng các phương pháp được bảo vệ, +1 – rem

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