2009-08-16 27 views

Trả lời

8

Nếu mã bạn đang viết nằm trong tệp mã-đằng sau cho tệp xaml, thì Visual Studio sẽ tự động tạo biến thành viên chứa tham chiếu đến bất kỳ phần tử nào có tên trong tệp xaml. Vì vậy, nếu bạn có một Button với x: Name = "myButton", bạn có thể truy cập nút này thông qua this.myButton.

Nếu bạn muốn tham khảo một yếu tố được đặt tên từ một nơi nào khác hơn là code-behind file, bạn có thể gọi FindName vào yếu tố để các yếu tố được đặt tên, ví dụ:

Button myButton = myGrid.FindName("myButton") as Button; 

nơi myGrid là một tham chiếu đến Lưới được đề cập.

+0

woot! những công việc này. Tôi tìm thấy một giải pháp thay thế phức tạp hơn một chút nhưng cũng hoạt động: Nút riêng myButtnon; foreach (FrameWorkElement fe trong myGrid.Children) { nếu (fe.GetType() == typeof (Nút) myButton = fe làm nút; } – Maciek

+0

Lưu ý rằng myButton sẽ là trường có khả năng truy cập nội bộ do đó thậm chí từ mã bên ngoài các tập tin mã phía sau bạn có thể truy cập nó mà không cần đến FindName – AnthonyWJones

+0

nếu bạn có bất kỳ ý tưởng bao lâu tôi tìm kiếm câu trả lời đơn giản này! cảm ơn cho câu hỏi thẳng là tốt – Arrie

1

Mỗi điều khiển có dấu x: Tên có trường được tạo cho nó trong lớp từng phần được tạo cho XAML. Trường này có khả năng truy cập nội bộ. Do đó từ mã với trong "code-behind" cs (tại sao tôi ghét thuật ngữ đó?) Bạn chỉ có thể sử dụng tên điều khiển trực tiếp trong mã để truy cập nó.

+0

Bạn có thể tử tế và công phu như vậy không? – Maciek

+0

Tôi nghĩ rằng anh ta có nghĩa là, nếu bạn có x: Name = "MyNamedControl". Khi bạn biên dịch nó, tệp Reference.g sẽ tự động có sẵn để bạn có thể chỉ cần nhập this.MyNamedControl – Paully

+0

Nhưng nếu bạn đang làm template, điều này sẽ không xảy ra và bạn nên sử dụng FindName – Paully

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