Событие Silverlight MouseLeftButtonDown не запускается - PullRequest
3 голосов
/ 27 марта 2010

Я могу получить события MouseEnter, MouseLeave и Click, но не MouseLeftButtonDown или MouseLeftButtonUp.

Вот мой XAML

    <UserControl x:Class="Dive.Map.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
        <Canvas x:Name="LayoutRoot" MouseLeftButtonDown="LayoutRoot_MouseLeftButtonDown">
            <Button x:Name="btnTest" Content="asdf" Background="Transparent"  MouseLeftButtonDown="btnTest_MouseLeftButtonDown"></Button>
        </Canvas>
    </UserControl>

А вот и мой код

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();
    }

    private void btnTest_MouseLeftButtonDown( object sender, MouseButtonEventArgs e )
    {
        btnTest.Content = DateTime.Now.ToString();
    }

    private void LayoutRoot_MouseLeftButtonDown( object sender, MouseButtonEventArgs e )
    {
        e.Handled = false;
    }
}

Что я делаю не так?

Ответы [ 3 ]

7 голосов
/ 27 марта 2010

Элемент управления Button (или, точнее, суперкласс ButtonBase, из которого он происходит) обрабатывает само событие MouseLeftButtonDown для генерации события Click. Следовательно, вы не можете получить событие MouseLeftButtonDown из стандартного Button.

Есть ли причина, по которой вы не используете событие Click?

4 голосов
/ 08 декабря 2011

Если вы добавите обработчики с кодом, подобным этому:

    dgv.AddHandler(DataGrid.MouseLeftButtonDownEvent, new MouseButtonEventHandler(dgv_MouseLeftButtonDown), true);
    dgv.AddHandler(DataGrid.MouseLeftButtonUpEvent, new MouseButtonEventHandler(dgv_MouseLeftButtonUp), true);

и убедитесь, что вы передали true в последнем аргументе "HandledEventsToo". Я думаю, вы заставите его работать - я сделал ...

0 голосов
/ 05 декабря 2013

Вы когда-нибудь замечали, что события MouseLeftButtonDown и MouseLeftButtonUp не запускаются при нажатии кнопки Silverlight? Причина этого заключается в том, что кнопка сама обрабатывает эти два события, переопределяя обработчики OnMouseLeftButtonDown и OnMouseLeftButtonUp. В переопределении OnMouseLeftButtonDown возникает событие Click, а событие MouseLeftButtonDown помечается как обработанное, поэтому оно не может всплыть в визуальном дереве. Переопределение OnMouseLeftButtonUp также помечает MouseLeftButtonUp как обработанный.

Эту вещь можно изменить с помощью свойства ClickMode элемента управления Button. Имеет следующие значения - Hover, Press, Release. По умолчанию используется Pressed, и мы уже объяснили это. Если для ClickMode установлено значение Release, событие Click будет вызываться в переопределении OnMouseLeftButtonUp, а события MouseLeftButtonDown и MouseLeftButtonUp будут снова обрабатываться внутри кнопки. Если мы установим ClickMode в Hover, событие Click будет вызвано событием MouseEnter, и мы также сможем использовать события кнопки мыши.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...