Почему в моих Silverlight UIElement НЕ есть события OnPreview?

Я создаю пользовательский элемент управления Silverlight UserControl, который должен прослушивать события с помощью предварительного просмотра/туннелирования, но по какой-то причине компилятор сообщает мне, что они не распознаются или не доступны.

Например, я могу добавить обработчик событий к MouseLeftButtonDown, но не к PreviewMouseLeftButtonDown. Это не имеет смысла, поскольку, согласно Microsoft (http://msdn.microsoft.com/en-us/library/system.windows.uielement_members(v=VS.100).aspx) ко всем UIElements должны быть прикреплены события предварительного просмотра.

Любые идеи относительно того, почему это происходит? Я использую Visual Studio 2010 Trial, Blend 4 RC и .Net 4, если это имеет значение.


person Matt.M    schedule 27.04.2010    source источник


Ответы (2)


Silverlight не поддерживает ни события предварительного просмотра, ни маршрутизируемые события (пузырьковое/туннелирование), за исключением нескольких основных событий.

Если вы пытаетесь создать элемент управления, который работает как с WPF, так и с Silverlight, вам потребуется другой подход. В зависимости от того, что вы пытаетесь сделать, вы можете добиться желаемого, настроив обработчик в коде и указав, что вы также хотите обрабатывать события.

// the last parameter indicates we want to receive events that
// were marked as e.Handled = true by other listeners
// this type of event handler can only be done in code
myUserControl.AddHandler(
    UIElement.MouseLeftButtonDownEvent,
    OnMouseLeftButtonDown,
    true
);
person Josh    schedule 27.04.2010
comment
Идеальный! Именно то, что мне было нужно, спасибо, что сделали все возможное и помогли мне решить мою проблему. - person Matt.M; 27.04.2010

Вы смотрите на справку по WPF, а не по Silverlight. Silverlight (в основном) является подмножеством WPF, и большая часть его функций отсутствует.

справка Silverlight UIElement не показывать эти события, так как они не существуют в Silverlight.

person Reed Copsey    schedule 27.04.2010