Проблема с WPF Stackpanel: как сгруппировать элементы в Circle? - PullRequest
0 голосов
/ 24 января 2011

У меня есть несколько элементов управления в кругу. Я хочу сгруппировать их, чтобы добавить общий обработчик, как показано здесь В WPF я могу прикрепить один и тот же обработчик щелчков к нескольким кнопкам одновременно, как я могу в Javascript / Jquery?

Но если я воспользуюсь Stackpanel, их больше не будет в кругу, так какая альтернатива стекпанели?

Так возможно ли это в WPF?

Ответы [ 2 ]

1 голос
/ 24 января 2011

Если вы абсолютно уверены, что хотите использовать один и тот же 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();
    }
}
1 голос
/ 24 января 2011

Будет ли PathListBox от Blend вариант?Вы можете прочитать об этом здесь .Он описан для Silverlight, но Blend также имеет версию WPF.

Это поможет вам расположить элементы управления любым удобным вам способом и по-прежнему хранить их в одном контейнере для обработки событий.

...