Как использовать кнопку x: Имя или что-то еще для обозначения кнопки

У меня проблема. Мне нужно сделать приложение для колледжа, эмулятор гитары, моя идея заключалась в том, чтобы поместить каждый лад как кнопку и реализовать функцию изменения цвета, чтобы понять, какой лад (кнопка) зажат (нажат)

var button = (Button)sender;
_buttonLastPressed = button;
var parent = (Grid)button.Parent;
var index = parent.Children.IndexOf(strip1_1);
var str = Math.Floor((decimal)(index + 1) / 20);
for (int i = 0; i < 20; i++)
{
    var element = (Button)parent.Children[i + Convert.ToInt32(str) * 20];
    element.Background = Brushes.White;
}
button.Background = Brushes.Blue;

Этот вариант работает хорошо, но возникла проблема, что я не знаю, как получить некоторую информацию от кнопки, чтобы использовать ее на том, какой звук воспроизводить (чтобы программа понимала, какая кнопка нажата). Я считаю, что можно было как-то использовать DataContext, но в голове не могу представить, как это сделать более грамотно

Для подсказки, струн шесть, каждую я решил объявить сеткой, а в каждой сетке 20 ладов (кнопок), из всех 20 можно зажать только одну

XAML:

<Button x:Name="strip1_1" Content="" HorizontalAlignment="Left" Margin="2,1,0,0" VerticalAlignment="Top" Width="22" Height="4" Click="Strip1_Click" BorderBrush="Black"/>
<Button x:Name="strip1_2" Content="" HorizontalAlignment="Left" Margin="37,1,0,0" VerticalAlignment="Top" Width="22" Height="4" Click="Strip1_Click" BorderBrush="Black"/>

person Axteity    schedule 26.05.2021    source источник
comment
Вы знакомы со свойством Command Button и интерфейсом ICommand?   -  person Maaz    schedule 26.05.2021
comment
Не могли бы вы также упомянуть XAML-часть того, как вы используете объект <Button/>?   -  person Maaz    schedule 26.05.2021
comment
Никогда об этом не слышал ...   -  person Axteity    schedule 26.05.2021
comment
@Maaz Ой ... Все 20 кнопок в сетке привязаны к одной функции, которая написана в вопросе, поэтому различий между ними практически нет. <Button x:Name="strip1_1" Content="" HorizontalAlignment="Left" Margin="2,1,0,0" VerticalAlignment="Top" Width="22" Height="4" Click="Strip1_Click" BorderBrush="Black"/> <Button x:Name="strip1_2" Content="" HorizontalAlignment="Left" Margin="37,1,0,0" VerticalAlignment="Top" Width="22" Height="4" Click="Strip1_Click" BorderBrush="Black"/>   -  person Axteity    schedule 26.05.2021
comment
Я бы посоветовал в качестве долгосрочной обучающей функции прочитать о шаблоне программирования MVVM. Начните здесь: Шаблон MVVM для Xamarin! < / а>   -  person Maaz    schedule 26.05.2021
comment
В парадигме WPF кнопки должны быть привязаны к командам. Вы можете включить параметр команды, чтобы вызываемая команда знала, какой лад или строка фактически вызывает команду. Подробности см. В дубликате.   -  person Peter Duniho    schedule 26.05.2021
comment
@Maaz большое спасибо за помощь, очень ценю ‹3   -  person Axteity    schedule 26.05.2021


Ответы (1)


Возможным решением может быть использование свойства Click каждой кнопки, которое ссылается на другой метод.

<Button Click="DoSomething_OnClick"/>

и в коде программной части:

private void DoSomething_OnClick(object sender, RoutedEventArgs e)
{
    // Your code here
}

Вы можете использовать это, чтобы получить 20 различных методов. Таким образом, вы точно знаете, какая кнопка и какой метод вызывала.

person Maaz    schedule 26.05.2021