Я просто пытался подписаться на события изменения свойств WPF, используя C++/CLI. Я не ожидал, что это станет трудным.
Сначала я попытался подписаться на определенное свойство некоторого окна (IsMouseDirectlyOver) и, наконец, преуспел в следующем коде:
void MyClass::DependencyPropertyChanged(Object^ sender, DependencyPropertyChangedEventArgs args)
{
Debug::WriteLine("DependencyPropertyChanged: "+sender->ToString()+", "+args.Property->Name);
}
window->IsMouseDirectlyOverChanged += gcnew DependencyPropertyChangedEventHandler(this, &MyClass::DependencyPropertyChanged);
Затем я попытался подписаться на любые изменения свойств объекта (что для меня наиболее важно, потому что мой окончательный код должен иметь возможность обрабатывать изменения свойств по именам свойств). Я полностью потерпел неудачу в этом.
Я пробовал разные вещи, но ничего не получалось. Я не смог найти никаких примеров C++/CLI, но, согласно документации и примерам C#, следующий код показался мне наиболее разумным:
window->PropertyChanged += gcnew PropertyChangedEventHandler(this, &MyClass::PropertyChanged);
void MyClass::PropertyChanged(Object^ sender, PropertyChangedEventArgs^ args)
{
...
}
Но компилятор сообщает мне об ошибке C2039, что «PropertyChangedEvent» не является элементом «System::Windows::Window».
Как я могу достичь того, чего хочу?