2012-04-30 7 views
0

Я немного застрял в этом.WPF Touch Event Culling

Пользовательский интерфейс для моего приложения имеет прямоугольник и маску непрозрачности, которая изменяется, чтобы отображать разные части пользовательского интерфейса. То, что я хочу сделать, - это пропускать любые события касания, которые происходят внутри прозрачных областей, и останавливать их снаружи.

Тем не менее, единственный способ получить мой прямоугольник для пропуска любых событий - установить IsHitTestVisible в False. Я попытался захватить [Preview] TouchUp/Move/Down и установить для False, но это не имеет значения.

Есть ли что-то, что мне не хватает?

Приветствия

UPDATE: Извините, если это не было ясно, я не ожидал, что события прикосновения провалиться сами по себе. Я бы проверял, попали ли они в маску, а затем установил Handled to True. Но кажется, что даже если я установил Handled to False, события все равно не проваливаются. Ничто из того, что мне кажется, не позволяет событиям провалиться, кроме IsHitTestVisible = False

ответ

0

Я думаю, что это нормальное поведение, поскольку непрозрачность играет с ... непрозрачностью, но все же прямоугольник находится поверх других элементов управления. Вы можете использовать клип вместо непрозрачности (но у вас будет только непрозрачность да/нет, нет оттенков) Или У вас может быть dictionnary (например) всех ваших элементов управления, которые заявляют, что они видны или скрыты вашей непрозрачностью маска. Затем вы установите для своего прямоугольника IsHitTestVisible значение false, а в обработчике событий Preview (TouchUp/Move/Down) вы отмените событие или не будете зависить, если элемент управления виден или нет.

+0

Я добавил немного больше информации, см. Обновление. На самом деле не нужно управлять словарем объектов ниже. – acron

+0

Мне все равно кажется, что поведение, с которым вы сталкиваетесь, является нормальным: когда событие достигает прямоугольника, оно не должно идти дальше, поскольку существует ненулевое заполнение, даже если альфа-канал (непрозрачность) этой заливки иногда 0. Если ваш элемент управления находится в пределах областей вашего пользовательского интерфейса и внутри разных панелей, не должно быть слишком сложно установить/очистить бит видимости внутри словаря (для каждого элемента управления в панели VisibilityDictionnary (control) = true .. .) – GameAlchemist