2012-06-06 1 views
2

Я хотел бы переопределить класс ядра wpf API (UIElement), я не хочу наследовать класс.Переопределите класс для добавления новых функций или найдите способ

У меня есть проект на MS Kinect, я переработал курсоры, сопоставленные с рукой скелета пользователя. Я применил подобное событие к тем, что мышь подняла (введите элементы, оставьте элемент ...). Я хочу, чтобы все элементы Наследование от UIElement, чтобы получить некоторые присоединенные свойства:

KinectCursorEnter, KinectCursorMove... 

и некоторые свойства:

public bool IsKinectLeftCursorOver { get; set; } 
    public bool IsKinectLeftCursorDirectlyOver { get; set; } 
    public bool IsKinectRightCursorOver { get; set; } 
    public bool IsKinectRightCursorDirectlyOver { get; set; } 
    public bool IsKinectLeftCursorCaptured { get; set; } 
     ... 

Я знаю, что есть много способов натворить, если я изменю такого класса, но на этом уровне я хочу добавить свойства thoses. (UIElement уже реализуют такие вещи, как MouseEnter, StylusEnter ...). Kinect представляет собой устройство ввода, как и любой другой (мышь, перо, клавиатура ...)

Я попробовать:

  • Для наследования UIElement и добавить эту функцию, но тогда я должен был бы Переопределите все классы.

Я посмотрим:

  • Если есть такая вещь, как открытые классы в Ruby
  • Если я могу использовать расширение (link)
  • Если я могу использовать каким-либо образом адаптер шаблон

до сих пор я использую использование:

  • интерфейс, и я заново все элементы: У меня есть KinectButton что наследует от Button и реализует IKinectInputElement, но я не могу сделать, что для некоторого класса, которые являются sealed (Rectangle, Ellipse ...)

Я думаю, что через несколько месяцев (годы?) MSFT реализует эти свойства и метод в Wpf API. Но пока мне нужен путь.

PS: Я не хочу управлять мышью одной рукой пользователя. есть одна мышь, я хочу иметь два курсора. и у меня есть такие события, как: KinectLeftCursorEnter, KinectRightCursorEnter и т. д.

ответ

4

Вы можете использовать Extension Methods для расширения класса.

+0

Я смотрю на расширение, проблема в том, что при вызове конструктора класса я хочу добавить обработчик к событиям: this.KinectCursorEnter + = new KinectCursorEventHandler (OnKinectCursorEnter); И соответствующий обработчик. Мне не нужна такая функция в другом методе, потому что я просто хочу поставить свой контроль на мою страницу wpf и сделать работу с тигами – astreal

+0

Для этого я думаю, что у вас нет другого выбора, кроме наследования от класса. –

+0

Если подумайте, что я сохраню свой интерфейс и наследую визуальный элемент, который мне нужен. Я нашел способ обрабатывать KinectUIElement и non-KinectUIElement в одно время на уровне KinectCursorManager. Я открываю этот вопрос, чтобы узнать, есть ли другой ответ.В любом случае @Asif спасибо за ваш ответ. Я отвечу на ваш ответ, как только у меня хватит репутации (в большинстве случаев расширение работает в большинстве случаев). – astreal

 Смежные вопросы

  • Нет связанных вопросов^_^