Если вы абсолютно уверены, что хотите использовать один и тот же Eventhadler для всех кнопок, вы можете использовать тот же прием, описанный по ссылке, которую вы упомянули.Вместо StackPanel вы можете использовать любой набор контейнеров (Grid, Canvas и т. Д.).
Альтернативный подход - использовать Canvas (или Grid) и поместить кнопки в него в круглую форму (используясвойства Canvas.Left / Right / Top / Bottom на кнопках или в случае Grid свойство Margin).Затем вы можете создать обработчик события MouseLeftButtonDown для Canvas.Таким образом, вы можете поймать каждый щелчок мышью внутри Canvas, но иногда вы захотите изменить разницу между кнопками и всем остальным в Canvas (если вам нужно).
Вот небольшой код для моей альтернативы (для лучшего понимания):
<Canvas MouseLeftButtonDown="Canvas_MouseLeftButtonDown">
<Button Canvas.Left="10", Canvas.Top="10"/>
<Button Canvas.Left="60", Canvas.Top="10"/>
</Canvas>
void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
//if you want to handle the buttonclicks only
if(e.Source is Button){
do_your_stuff();
}
}