Panel 안의 모든 Button 에 같은 이벤트를 적용하는 방법입니다.
우선 각각 버튼에 이벤트를 주는 경우는 아래와 같습니다.
public MainWindow() { InitializeComponent();
StackPanel stack = new StackPanel(); Content = stack; Random rand = new Random(); for (int i = 0; i < 10; i++) { Button btn = new Button(); btn.Name = ((char)('A' + i)).ToString(); btn.FontSize += rand.Next(10); btn.Content = "Button " + btn.Name + " says 'Click me'"; btn.Click += ButtonOnClick; stack.Children.Add(btn); } }
void ButtonOnClick(object sender, RoutedEventArgs args) { Button btn = args.Source as Button; MessageBox.Show("Button " + btn.Name + " has been clicked", "Button Click"); } |
AddHandler 와 RoutedEventHandler 를 사용해 아래 처럼 하면 위 처리한 방식과 같은 처리가 가능합니다.
* 모든 버튼의 ClickEvent 를 하나의 이벤트(ButtonOnClick)로 연결시켜줍니다.
public MainWindow() { InitializeComponent();
StackPanel stack = new StackPanel(); Content = stack; Random rand = new Random(); for (int i = 0; i < 10; i++) { Button btn = new Button(); btn.Name = ((char)('A' + i)).ToString(); btn.FontSize += rand.Next(10); btn.Content = "Button " + btn.Name + " says 'Click me'"; stack.Children.Add(btn); }
stack.AddHandler(Button.ClickEvent, new RoutedEventHandler(ButtonOnClick)); }
void ButtonOnClick(object sender, RoutedEventArgs args) { Button btn = args.Source as Button; MessageBox.Show("Button " + btn.Name + " has been clicked", "Button Click"); } |
'C# > WPF' 카테고리의 다른 글
[WPF] 상단 검은색 메뉴? 제거 하기 (런타임 도구 제거) (0) | 2020.07.06 |
---|---|
[WPF] 디스크 남은 용량 알아내기 (0) | 2020.07.06 |
[WPF] DrawingContext 영역을 벗어나지 않게 클리핑 영역 설정하기 (0) | 2020.07.05 |
[WPF] 비정상 종료 막기 (0) | 2020.07.02 |
[WPF] 프로젝트 내 이미지 파일 사용하기 (0) | 2020.07.01 |