Как контролировать событие MouseDown TextBlock в code-behind?

У меня есть один ListBox с TextBlocks как список:

<ListBox Grid.Row="1" Margin="5">
     <TextBlock Name="Address1" MouseDown="SongAddress"/>
     <TextBlock Name="Address2" MouseDown="SongAddress"/>
     <TextBlock Name="Address3" MouseDown="SongAddress"/>
     <TextBlock Name="Address4"  MouseDown="SongAddress"/> </ListBox>

Их 4 TextBlocks у которого есть событие MouseDown. И я хочу различную функциональность для каждого. Поскольку он мог бы контролировать с code-behind на который 4 нажали?

1
задан 13.01.2017, 21:28
0 ответов

У драйвера событий в коде, ассоциируемом с твоим формуляром будет более или менее эта форма:

    private void SongAddress_MouseDown(object sender, MouseButtonEventArgs e)

В этом случае, аргументе sender он показывает тебе контроль, который бросил событие. Сейчас единственное, что ты должен делать, состоит в том, чтобы подтверждать имя кнопки, ассоциируемой с событием и звонить в подходящую функцию:

    private void SongAddress_MouseDown(object sender, MouseButtonEventArgs e)
    { switch ((sender as TextBlock)?.Name)
            {   case "Address1":
                        TratamientoDelTextAddress1();
                    break;
                case "Address2":
                        TratamientoDelTextAddress2();
                    break;
                ...
            }
    }

Где конечно, функции TratamientoDelBotonXXXX он, где пойдет твой присоединенный код.

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

    private void SongAddress_MouseDown(object sender, MouseButtonEventArgs e)
    { switch ((sender as TextBlock)?.Name)
            {   case nameof(Address1):
                        TratamientoDelTextAddress1();
                    break;
                case nameof(Address2):
                        TratamientoDelTextAddress2();
                    break;
                ...
            }
    }

Где nameof это новая функция C# 6.0, которая возвращает тебе имя элемента или свойства. В этом случае, если ты изменишь имя поля ввода текста, составитель предупредит тебя с ошибкой и ты сможешь изменять код без проблемы (я не уверен, для WPF делает ли VS изменение имени автоматически).

0
ответ дан 03.12.2019, 17:41
  • 1
    ¡ Большое спасибо! Полностью функциональный, он был много помощи. –  21.01.2017, 04:32