2010-12-13 68 views
45

Sự khác nhau giữa x:Keyx:Name trong WPF là gì?Sự khác biệt giữa x: Khóa và x: Tên trong WPF là gì?

Tôi không chắc sự khác biệt thực sự là gì.

+1

@Alastair, câu hỏi mà bạn liệt kê là bản dupe có thể không liên quan đến điều này. – Josh

+1

làm thế nào nó là một bản sao? Câu hỏi khác nói về 'Name' và' Type'. Câu hỏi này là về 'Key' vs' Name'. – jalf

+0

Sai lầm của tôi, tôi đã hiểu sai câu hỏi "có thể lừa đảo". Xin lỗi. –

Trả lời

43

Mặc dù chúng được sử dụng cho các mục đích tương tự nhau, chúng không thể hoán đổi cho nhau. x: Khóa được sử dụng cho các mục đang được thêm làm giá trị cho một từ điển, thường xuyên nhất cho các kiểu và các tài nguyên khác đang được thêm vào một ResourceDictionary. Khi thiết lập thuộc tính x: Key, thực sự không có thuộc tính tương ứng nào trên đối tượng hoặc thậm chí thuộc tính dependency đính kèm được thiết lập. Nó chỉ đơn giản được sử dụng bởi bộ vi xử lý XAML để biết khóa nào cần sử dụng khi gọi Dictionary.Add.

x: Tên hơi phức tạp hơn một chút. Nó được sử dụng để áp dụng một tên liên quan đến một đối tượng (thường là một đối tượng bắt nguồn từ FrameworkElement) trong phạm vi của một số phần tử cha. Phạm vi này được gọi là "kính viễn vọng" và cách dễ nhất để nghĩ về nó là tưởng tượng một UserControl có chứa <TextBox x:Name="foo" />.

Sau đó bạn có thể đặt nhiều phiên bản của UserControl vào cửa sổ mà không có tên "foo" va chạm vì mỗi UserControl có tên riêng của nó.

Điều đáng lưu ý là FrameworkElement xác định thuộc tính phụ thuộc được gọi là Tên tương đương với thiết lập x: Tên.

Sự khác biệt khác là trình thiết kế XAML tạo thành viên trong mã-đằng sau cho các phần tử có tên x:. Điều này không đúng với các đối tượng được thêm vào từ điển bằng cách sử dụng x: Key.

Bạn có thể tìm thêm thông tin về phần này trong phần nhận xét của tài liệu MSDN cho the x:Name directive.

20

x: Khóa chỉ hợp lệ trong phạm vi phần tử ResourceDictionary. x: Khóa được sử dụng làm mã định danh chính cho các phần tử trong ResourceDictionary.

Mặt khác, x: Tên là hợp lệ trong phạm vi của mọi thứ trừ ResourceDictionary. x: Khóa không hợp lệ bên ngoài phạm vi ResourceDictionary.

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