c# - 如何在 c# wpf 中将点击处理程序添加到动态创建的按钮(未创建对象)
问题描述
通过使用下面的代码(code1),我创建了一个动态堆栈面板,通过之前生成的选项文件将按钮添加到我的程序中,但我想知道如何将点击监听器添加到生成的每个按钮,因为我无法从每个按钮创建对象。
我尝试使用提到的代码(代码 2)添加点击监听器,但它没有成功,而且我倾向于抛出控件并找到每个按钮,但我得到空引用异常(代码 3)
//code1
StackPanel option_row = new StackPanel();
option_row.Name = "option_row" + i.ToString();
option_row.Children.Add(
new Button
{
Name = "write_btn" + i.ToString(),
VerticalAlignment = VerticalAlignment.Top,
Margin = new Thickness(5),
Content = "Write",
Height = 55,
Width = 80
}
);
//code2
option_row.Children.Add(
new Button
{
Name = "write_btn" + i.ToString(),
VerticalAlignment = VerticalAlignment.Top,
Margin = new Thickness(5),
Content = "Write",
Height = 55,
Width = 80
}.Click += new RoutedEventHandler(home_read_click)
);
private void home_read_click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
}
//code3
private void btn_sorter()
{
for (int i = 0; i < options_num; i++)
{
StackPanel x =(StackPanel) FindName("option_row" + i.ToString());
foreach (Button item in x.Children)
{
if (item.Name.Contains("read"))
{
home_read_buttons[i] = item.Name;
}
else if (item.Name.Contains("write"))
{
home_write_buttons[i] = item.Name;
}
}
}
}
代码 2 中的错误:最佳重载方法匹配
System.Windows.Controls.UIElementCollection.Add(System.Windows.UIElement)' has some invalid arguments
Argument 1: cannot convert from 'void' to 'System.Windows.UIElement'
解决方案
您应该首先创建 Button 对象,然后将其分配给 'option_row.Children',如下所示:
var btn = new Button
{
Name = "write_btn" + i.ToString(),
VerticalAlignment = VerticalAlignment.Top,
Margin = new Thickness(5),
Content = "Write",
Height = 55,
Width = 80
};
btn.Click += new RoutedEventHandler(home_read_click);
option_row.Children.Add(btn);
推荐阅读
- google-cloud-platform - Cloud Run Oauth 访问 Google Drive
- javascript - 如何正确检测移相器 3 中的对象碰撞?
- node.js - 从 git 存储库安装 npm 包时可以跳过一些依赖项吗?
- reactjs - 如何在表格组件内的对象内映射数组?
- javascript - 无法在 javascript 中执行不等式运算符
- swift - 如何在 Swift 中从谷歌地图中删除行进路径
- sql - 具有特定于该行的硬编码值的未透视行上的输出列
- python - 如何使用 GDAL/OGR 栅格化(在 jupyter 笔记本中),EPSG 中矢量文件的 crs:4326
- javascript - Redux-Persist 不会将 store 保存到 localStorage
- ansible - Ansible 同步模块在复制部分文件后冻结