WPF(C#)で、ボタンを動的に配置し、イベントを定義する方法。
実行例
※ボタンはソース側にて、動的に配置しています。
ボタンを押したときのイベント内容
dynamicButton01がクリックされました。 dynamicButton02がクリックされました。
(記述例)
xaml側
<Window x:Class="PracticeWPF.MyWindow14" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:PracticeWPF" mc:Ignorable="d" Title="MyWindow14" Height="450" Width="800"> <Grid> <StackPanel x:Name="myStackPanel01" Width="500" Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Top" > </StackPanel> </Grid> </Window>
cs側
using System; using System.Windows; using System.Windows.Controls; namespace PracticeWPF { /// <summary> /// 動的に配置したボタンにイベントを定義 /// </summary> public partial class MyWindow14 : Window { public MyWindow14() { InitializeComponent(); SetButtonDynamicEvent(); } private void SetButtonDynamicEvent() { Button b1 = new Button(); b1.Content = "Dynamic Button01"; b1.Name = "b1"; b1.Click += (sender, e) => ButtonDynamicEvent(sender); myStackPanel01.Children.Add(b1); Button b2 = new Button(); b2.Content = "Dynamic Button02"; b2.Name = "b2"; b2.Click += (sender, e) => ButtonDynamicEvent(sender); myStackPanel01.Children.Add(b2); } private void ButtonDynamicEvent(object sender) { Console.WriteLine(((Button)sender).Name + "がクリックされました。"); } } }