Один из способов сделать это - использовать настраиваемый атрибут. Вот так...
UIElement
, который вы хотите зарегистрировать (например, UserControl):
[UserInterfaceID(ID = "{F436E9B3-C2F6-4CF8-8C75-0A2A756F1C74}")]
public partial class MyUserControl : UserControl
{
InitializeComponent();
// or whatever...
}
Тогда вам понадобится класс настраиваемого атрибута
[System.AttributeUsage(AttributeTargets.Class)]
public class UserInterfaceIDAttribute : Attribute
{
public Guid ID { get; set; }
}
Теперь в вашем коде вы можете сделать что-то вроде этого:
MyUserControl control = new MyUserControl();
foreach(object att in control.GetCustomAttributes(typeof(UserInterfaceAttribute),false))
{
UserInterfaceAttribute uiAtt = (UserInterfaceAttribute)att;
Guid theID = uiAtt.ID;
}
Поскольку вы помечаете элемент управления атрибутом в коде, уникальный идентификатор никогда не меняется, независимо от того, сколько раз вы убиваете / запускаете приложение.
Конечно, это базовый пример, который показывает, как получить доступ к идентификатору, но вы, вероятно, захотите использовать какой-либо тип аспектно-ориентированного программирования. Я делаю именно такие вещи, используя Castle Windsor Interceptors, но это выходит за рамки этой статьи.
В идеале вы получите доступ к этому идентификатору, когда произойдет какое-то событие, которое запускается. Использование перехватчиков позволяет вам выполнять вызовы методов захвата до того, как они будут вызваны, при этом вы можете найти идентификатор, как показано выше, и зарегистрировать действие. В качестве альтернативы вы можете просто использовать
this.GetCustomAttributes(...)
в каком-либо методе, когда событие запускается в элементе управления, и вставьте туда свой код ведения журнала. Этот шаблон не самый лучший, потому что вы разбрасываете сквозные проблемы, улучшая какой-либо подход к аспектно-ориентированному программированию ... но снова я отвлекся, и это выходит за рамки этого сообщения ... но вы понимаете идея.
Надеюсь это поможет.
person
Ricky
schedule
20.04.2012