MouseUp / Preview MouseUp не запускает WPF [дубликат]

Я думаю, вы просите об этом:

var part1name = someObject.part1.name;
var part2quantity = someObject.part2.qty;
var part3name1 =  someObject.part3[0].name;

Вы могли бы попросить об этом:

var part1name = someObject["part1"]["name"];
var part2quantity = someObject["part2"]["qty"];
var part3name1 =  someObject["part3"][0]["name"];

Оба из них будут работать


Или, может быть, вы просите об этом

var partName = "part1";
var nameStr = "name";

var part1name = someObject[partName][nameStr];

Наконец, вы можете попросить об этом

var partName = "part1.name";

var partBits = partName.split(".");

var part1name = someObject[partBits[0]][partBits[1]];
11
задан Adam Driscoll 25 November 2008 в 18:55
поделиться

3 ответа

Похоже, элемент управления Button уничтожает это событие. Поскольку Button.Click на самом деле представляет собой комбинацию события LeftButtonDown и события LeftButtonUp.

Но вы можете подписаться на событие Tunnelled PreviewMouseLeftButtonUp на кнопке, чтобы получить LeftButtonUp

24
ответ дан Jobi Joy 25 August 2018 в 07:21
поделиться
  • 1
    Зачем благодарю вас. Я знал, что это должно быть чем-то легким, как пирог. – Adam Driscoll 25 November 2008 в 19:02

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

Вот лучшее решение, так как в нем сохраняется ваш пузырь. :)

btnNewConfig.AddHandler(MouseLeftButtonUpEvent, 
                        new RoutedEventHandler(btnNewConfig_MouseUp), 
                        true);

Вам нужно объявить обработчик событий с помощью RoutedEventArgs вместо MouseButtonEventArgs, но вы можете просто вернуть его обратно в MouseButtonEventArgs внутри.

void btnNewConfig_MouseUp(object sender, RoutedEventArgs e)
{
    MouseButtonEventArgs args = e as MouseButtonEventArgs;

Обратите внимание на последний аргумент в AddHandler - это приводит к тому, что ваше событие срабатывает, даже если предыдущий обработчик установлен e.Handled = true;

Теперь о PreviewMouseLeftButtonUp: события туннелирования для родителей перед детьми. Bubbling - наоборот. Если у вас много обработчиков событий, вы должны действительно придерживаться всех пузырьков или всего туннелирования, или больше, чем больше обработчиков событий, которые вы добавляете, тем более запутанным становится - добавление одного нового обработчика событий может привести к повторному просмотру всех остальных приложений. Большинство людей считают модель барботирования более естественной. Вот почему принятый ответ проблематичен.

0
ответ дан ILIA BROUDNO 25 August 2018 в 07:21
поделиться
  • 1
    Постскриптум e.Handled - не единственная причина, по которой ваше событие не может быть уволено. Другая возможность - это что-то вверху от вас под названием Mouse.Capture. – ILIA BROUDNO 9 May 2018 в 23:14
Кнопка

использует события MouseLeft / RightButtonUp / Down (и маркирует их как «обработанные») для своих событий Button.Click.

Как сказал Джоби, вы можете использовать событие PreviewMouseLeftButtonUp, но я хочу предложить вам создать свой собственный шаблон кнопки и изменить его поведение. (т. е. не отмечать MouseLeftButtonUp as Handled = true) или просто использовать что-то еще, чем кнопку в качестве родительского контейнера. (Зависит от того, что вам действительно нужно).

2
ответ дан oXeNoN 25 August 2018 в 07:21
поделиться
Другие вопросы по тегам:

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