Một cách bạn có thể làm điều này là với thuộc tính tùy chỉnh. Giống như rất ...
Các UIElement
bạn muốn đăng nhập (UserControl ví dụ):
[UserInterfaceID(ID = "{F436E9B3-C2F6-4CF8-8C75-0A2A756F1C74}")]
public partial class MyUserControl : UserControl
{
InitializeComponent();
// or whatever...
}
Sau đó, bạn cần tùy chỉnh thuộc tính lớp
[System.AttributeUsage(AttributeTargets.Class)]
public class UserInterfaceIDAttribute : Attribute
{
public Guid ID { get; set; }
}
Bây giờ trong mã của bạn, bạn có thể làm một cái gì đó như thế này:
MyUserControl control = new MyUserControl();
foreach(object att in control.GetCustomAttributes(typeof(UserInterfaceAttribute),false))
{
UserInterfaceAttribute uiAtt = (UserInterfaceAttribute)att;
Guid theID = uiAtt.ID;
}
Vì bạn đang gắn thẻ điều khiển với thuộc tính trong mã, số nhận dạng duy nhất không bao giờ thay đổi bất kể bạn đã giết/khởi chạy ứng dụng bao nhiêu lần.
Tất nhiên đây là một ví dụ cơ bản cho thấy cách truy cập ID nhưng có thể bạn sẽ muốn sử dụng một số loại Lập trình hướng Aspect. Tôi làm chính xác loại điều này bằng cách sử dụng Castle Windsor Interceptor, nhưng điều đó nằm ngoài phạm vi của bài đăng này.
Lý tưởng nhất là bạn sẽ truy cập ID này khi có một số loại sự kiện bị sa thải.Sử dụng interceptor cho phép bạn thực hiện các cuộc gọi phương thức capture trước khi chúng được gọi trong đó bạn có thể tra cứu ID như được hiển thị ở trên và ghi lại hành động. Ngoài ra, bạn chỉ có thể sử dụng
this.GetCustomAttributes(...)
trong một số phương pháp khi sự kiện được kích hoạt trên kiểm soát và nhúng mã Đăng nhập của bạn vào đó. Mô hình này không phải là tốt nhất bởi vì bạn đang rải rác các mối quan tâm cắt ngang trên tất cả làm cho một số loại phương pháp lập trình hướng Aspect tốt hơn ... nhưng một lần nữa tôi digress và nó nằm ngoài phạm vi của bài đăng này ... nhưng bạn nhận được ý kiến.
Hy vọng điều này sẽ hữu ích.
Bạn đã thử thuộc tính [FrameworkElement.Name] (http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.name.aspx) chưa? – DmitryG
Yea Dmitry, nhưng Tên có thể trống, tôi không muốn đặt Tên trên mọi điều khiển dành riêng cho mục đích khai thác –
@ArsenMkrt, [PersistId] (http://msdn.microsoft.com/en-us/library/ thuộc tính system.windows.uielement.persistid.aspx) có vẻ là những gì bạn đang tìm kiếm. Than ôi, nó bây giờ đã lỗi thời và dường như không có sự thay thế. Có thể bạn có thể quay trở lại để tự tạo các số nhận dạng duy nhất, trong trường hợp đó, hãy xem [câu hỏi này] (http://stackoverflow.com/q/750947/464709). –