Re[3]: [WPF] Клик средней кнопкой мыши
От: Danchik Украина  
Дата: 19.11.13 13:12
Оценка: 3 (1) +1
Здравствуйте, VetalPPC, Вы писали:

[Skip]

VPP>Спасибо за помощь, но немного не то. В таком случае сообщение "Middle button clicked" срабатывает так же и в том случае если зажать кнопку в другом месте, а затем отжать на целевом элементе.

А проявить элементарную смекалку.... RTFM об Mouse Capturing...

    private void TxtSample2_OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        if (e.ChangedButton == MouseButton.Middle)
            ((FrameworkElement)sender).CaptureMouse();
    }

    private void TxtSample2_OnMouseUp(object sender, MouseButtonEventArgs e)
    {
        if (e.ChangedButton == MouseButton.Middle)
        {
            var element = (FrameworkElement)sender;
            if (element.IsMouseCaptured)
            {
                element.ReleaseMouseCapture();
                if (element.IsMouseOver)
                    MessageBox.Show("Middle button clicked");
                else
                    MessageBox.Show("Middle button clicked oustide");
            }
        }
    }
[WPF] Клик средней кнопкой мыши
От: VetalPPC  
Дата: 19.11.13 09:48
Оценка:
Подскажите, пожалуйста, как словить событие клика средней кнопки мыши? Нужен именно полноценный клик. В MouseUp, к сожалению, не получается проверить был ли MouseDown перед этим сделан на том же элементе.
Re: [WPF] Клик средней кнопкой мыши
От: Danchik Украина  
Дата: 19.11.13 10:45
Оценка:
Здравствуйте, VetalPPC, Вы писали:

VPP>Подскажите, пожалуйста, как словить событие клика средней кнопки мыши? Нужен именно полноценный клик. В MouseUp, к сожалению, не получается проверить был ли MouseDown перед этим сделан на том же элементе.


Если я правильно понял постановку задачи, то как то так (но подцепился я на PreviewMouseDown):
    private void TxtSample2_OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        if (e.ChangedButton == MouseButton.Middle)
            ((FrameworkElement)sender).CaptureMouse();
    }

    private void TxtSample2_OnMouseUp(object sender, MouseButtonEventArgs e)
    {
        if (e.ChangedButton == MouseButton.Middle)
        {
            var element = (FrameworkElement)sender;
            element.ReleaseMouseCapture();
            if (element.IsMouseOver)
                MessageBox.Show("Middle button clicked");
            else
                MessageBox.Show("Middle button clicked outside");
        }
    }
Re[2]: [WPF] Клик средней кнопкой мыши
От: VetalPPC  
Дата: 19.11.13 12:56
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Здравствуйте, VetalPPC, Вы писали:


VPP>>Подскажите, пожалуйста, как словить событие клика средней кнопки мыши? Нужен именно полноценный клик. В MouseUp, к сожалению, не получается проверить был ли MouseDown перед этим сделан на том же элементе.


D>Если я правильно понял постановку задачи, то как то так (но подцепился я на PreviewMouseDown):

D>
D>    private void TxtSample2_OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
D>    {
D>        if (e.ChangedButton == MouseButton.Middle)
D>            ((FrameworkElement)sender).CaptureMouse();
D>    }

D>    private void TxtSample2_OnMouseUp(object sender, MouseButtonEventArgs e)
D>    {
D>        if (e.ChangedButton == MouseButton.Middle)
D>        {
D>            var element = (FrameworkElement)sender;
D>            element.ReleaseMouseCapture();
D>            if (element.IsMouseOver)
D>                MessageBox.Show("Middle button clicked");
D>            else
D>                MessageBox.Show("Middle button clicked outside");
D>        }
D>    }
D>


Спасибо за помощь, но немного не то. В таком случае сообщение "Middle button clicked" срабатывает так же и в том случае если зажать кнопку в другом месте, а затем отжать на целевом элементе.
Re: [WPF] Клик средней кнопкой мыши
От: netivan  
Дата: 04.12.13 06:32
Оценка:
Здравствуйте, VetalPPC, Вы писали:

VPP>Подскажите, пожалуйста, как словить событие клика средней кнопки мыши? Нужен именно полноценный клик. В MouseUp, к сожалению, не получается проверить был ли MouseDown перед этим сделан на том же элементе.


вариант:


private void ButtonBase_OnClick(object sender, MouseButtonEventArgs e)
        {
            if (e.ClickCount == 1 && e.ButtonState == MouseButtonState.Pressed &&
                e.ChangedButton == MouseButton.Middle)
            {
                
            }
        }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.