2009-09-24 39 views
9

vì vậy tôi có UserControl này bên trong một UserControl khác. Cho phép gọi chúng là ParentUC và ChildUC. Tôi cần lấy ParentUC từ ChildUC.WPF Nhận chủ sở hữu UserControl

Tôi biết để chủ sở hữu cửa sổ là Window.GetWindow(userControl), nhưng UserControl không có phương thức như AFAIK này.

Cảm ơn sự giúp đỡ!

Trả lời

14

Tôi đã đưa ra giải pháp này nhưng đăng nếu bạn có giải pháp tốt hơn. Cảm ơn!

DependencyObject ucParent = this.Parent; 

while (!(ucParent is UserControl)) 
{ 
    ucParent = LogicalTreeHelper.GetParent(ucParent); 
} 
0

Bạn luôn có thể sử dụng VisualTreeHelper.GetParent(child) để trả về cấp độ gốc trong Cây thị giác (điều khiển người dùng cha mẹ từ điều khiển người dùng lồng nhau).

+0

Tôi đã làm điều đó nhưng nó nhận được lưới có chứa điều khiển, đó là lý do tôi phải lặp cho đến khi nó nhận được UserControl đầu tiên trong cây hợp lý. Và tôi nghĩ rằng nó tốt hơn để sử dụng LogicalTreeHelper vì vậy vòng lặp không nhận được vào các mẫu, adorners, vv Cảm ơn lời đề nghị. – Carlo

0

UserControl có thuộc tính .Parent sẽ cấp cho bạn quyền truy cập vào cha mẹ đó.

Sau đó, bạn có thể truyền cho đối tượng ParentUC của mình.

+0

Có, vấn đề là UserControl có thể là bên trong của một StackPanel, đó là bên trong của một lưới, đó là bên trong của UserControl cha mẹ, trong trường hợp myUserControl.Parent sẽ là một StackPanel, myUserControl.Parent.Parent sẽ là một Lưới, và cuối cùng myUserControl.Parent.Parent.Parent (lol của khóa học này được đơn giản hóa bằng cách không đúc phụ huynh để StackPanel hoặc Grid) sẽ là UserControl. Đó là lý do tại sao tôi sử dụng vòng lặp để có được UserControl đầu tiên được tìm thấy trên đầu trang của một đứa trẻ. – Carlo

+0

Haha, tôi thấy giải pháp bạn đã đăng (không nhận ra rằng bạn đã đặt câu hỏi) và vì câu hỏi xuất hiện (với tôi) để cho biết ChildUC là con của ParentUC, tôi muốn cung cấp một cách đơn giản hơn câu trả lời. Với thông tin bổ sung cho kịch bản của bạn, tôi nghĩ rằng giải pháp bạn đưa ra là những gì bạn cần làm. – Scott

+0

Có vẻ như vậy. Một nơi nào đó tôi đọc đó là những gì Window.GetWindow (UIElement) làm, vì vậy tôi đoán đó là đặt cược tốt nhất. Nhờ đề nghị mặc dù! – Carlo

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