かきスタンプ

福岡でフリーランスの物流系のエンジニアやってます。

WPF:動的に配置したボタンにイベントを定義

WPFC#)で、ボタンを動的に配置し、イベントを定義する方法。

実行例

f:id:kakisoft:20180404222601p:plain

※ボタンはソース側にて、動的に配置しています。

ボタンを押したときのイベント内容

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 + "がクリックされました。");
        }
    }
}