Событие Silverlight MouseLeftButtonDown не сработало

Я столкнулся с проблемой, когда в событии Silverlight MouseLeftButtonDown не запускается для Button и hyperlinkButton. Похоже, это обрабатывается где-то в рамках. Как я могу переопределить это поведение

В приведенном ниже коде XAML Когда я нажимаю кнопку "Отменено", Button_MouseLeftButtonDown не запускается. Я попытался поместить текстовый блок внутри кнопки, MouseLeftButtonDown работает, когда я нажимаю на текст на кнопке, но он не всплывает до кадра

    <Button Name="Cancel" ClickMode="Release" MouseLeftButtonDown="Button_MouseLeftButtonDown">
            <Button.Content>
                <TextBlock Name="CancelInnerText" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown">Clone Page</TextBlock>
            </Button.Content>

4 ответа

Решение

Чтобы все заработало, пришлось установить ClickMode="Hover" для кнопки. Теперь событие MouseLeftButtonDown запускается, а также всплывает

Вы можете вызвать метод AddHandler для события MouseLeftButtonDown (как показано ниже), и это событие будет запущено в вашем коде.

button1.AddHandler(Button.MouseLeftButtonDownEvent, new  ouseButtonEventHandler(button1_MouseLeftButtonDown), true);

private void button1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
        // your code
}

Да, я не уверен, зачем ты здесь. Это какая-то странная ситуация, или вы просто ищете кнопку, которая запускает событие, когда вы нажимаете на нее?

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

    <Button Name="Cancel" Click="Button_Click">
        <Button.Content>
            <TextBlock>Clone Page</TextBlock>
        </Button.Content>
    </Button>

Ты не серьезен! Что произойдет, если пользователь коснется кнопки отмены в большой форме? Просто стрельба, что связано с кнопкой отмены??

Магия связана с механизмом фокусировки, исходящим из контроля. Он будет перенаправлять все события на сфокусированный элемент (в статическом классе глубоко внутри фреймворка). И на mousebuttondownэтот фокус устанавливается через base.Focus();

Итак: просто переопределить MouseLeftButtonDown и установите фокус, и все работает отлично.

Пример элемента управления, который можно разместить внутри кнопки (или шаблона кнопки):

public class InAction : ContentControl
{
    public InAction()
    {
        this.DefaultStyleKey = typeof(InAction);
        this.MouseLeftButtonDown += new MouseButtonEventHandler(InAction_MouseLeftButtonDown);
    }

    void InAction_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        base.Focus();   
    }
}
Другие вопросы по тегам