Я думаю, вы просите об этом:
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]];
Похоже, элемент управления Button уничтожает это событие. Поскольку Button.Click на самом деле представляет собой комбинацию события LeftButtonDown и события LeftButtonUp.
Но вы можете подписаться на событие Tunnelled PreviewMouseLeftButtonUp на кнопке, чтобы получить LeftButtonUp
Подписывание туннелированного события вместо пузырька имеет некоторые довольно грязные побочные эффекты, которые я объясню позже.
Вот лучшее решение, так как в нем сохраняется ваш пузырь. :)
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 - наоборот. Если у вас много обработчиков событий, вы должны действительно придерживаться всех пузырьков или всего туннелирования, или больше, чем больше обработчиков событий, которые вы добавляете, тем более запутанным становится - добавление одного нового обработчика событий может привести к повторному просмотру всех остальных приложений. Большинство людей считают модель барботирования более естественной. Вот почему принятый ответ проблематичен.
использует события MouseLeft / RightButtonUp / Down (и маркирует их как «обработанные») для своих событий Button.Click.
Как сказал Джоби, вы можете использовать событие PreviewMouseLeftButtonUp, но я хочу предложить вам создать свой собственный шаблон кнопки и изменить его поведение. (т. е. не отмечать MouseLeftButtonUp as Handled = true) или просто использовать что-то еще, чем кнопку в качестве родительского контейнера. (Зависит от того, что вам действительно нужно).