WPF: Тестирование Хита Adorner / Событие mouseDown

У меня есть Adorner, который украшает Границу (см. снимок экрана ниже). Событие mouseDown для Adorner однако только повышено при нажатии на элемент в adorner. Мне нужно Событие mouseDown, которое будет повышено при нажатии на любое место в adorner выше украшенного элемента. Как это может быть сделано? Я должен добавить прозрачное управление в adorner или есть ли иначе для этого? Спасибо за любую справку!

Снимок экрана и проект VS 2008 года: http://cid-0432ee4cfe9c26a0.skydrive.live.com/browse.aspx/%C3%96ffentlich?uc=2

Код для adorner:

class myAdorner : Adorner
{
    public myAdorner(UIElement element)
        : base(element)
    {
        this.MouseDown += new System.Windows.Input.MouseButtonEventHandler(myAdorner_MouseDown);
    }


    void myAdorner_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        MessageBox.Show("ok");
    }


    // Draws two rectangles: one in the upper-left and another one in the lower-right corner
    protected override void OnRender(System.Windows.Media.DrawingContext drawingContext)
    {
        Size size = this.AdornedElement.RenderSize;

        Rect r1 = new Rect(0.5, 0.5, 20, 20);
        Rect r4 = new Rect(size.Width - 20.5, size.Height - 20.5, 20, 20);


        SolidColorBrush brush = new SolidColorBrush(Colors.AliceBlue);
        Pen pen = new Pen(Brushes.Black, 1);

        drawingContext.DrawRectangle(brush, pen, r1);
        drawingContext.DrawRectangle(brush, pen, r4);
    }
}

6
задан stefan.at.wpf 29 March 2010 в 01:13
поделиться

2 ответа

Когда я делал это раньше, я всегда использовал прозрачный контейнер. Недостаточно иметь пустую кисть; вам действительно нужно использовать цвет # 00000000 (или какой-либо другой цвет альфа 0). Вы можете отключить IsHitTestVisible для элементов внутри контейнера, чтобы контейнер получал все события нажатия мыши.

3
ответ дан 17 December 2019 в 07:02
поделиться

Итак, проблема в том, что ваше украшение может вызывать события мыши только там, где есть видимые элементы. в твоем украшении ... два квадрата в углу.

Если вы хотите отслеживать события мыши по всему элементу, который вы украшаете, вы должны зарегистрировать AdornedElement.PreviewMouseDown. Это даст вашему украшению возможность выполнить свою работу до того, как событие MouseDown будет запущено украшенным элементом.

1
ответ дан 17 December 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: