如何为以编程方式创建的组合框设置事件方法?
How do I set event methods for programmatically created combo boxes?
我正在创建动态创建组合框的小程序。每次用户打开程序时,根据某些上下文,可能有 3-30 个项目需要 4 个下拉列表进行选择。我正在根据以下代码创建这些,这只是一个片段。
for (int i = 0; i < 4; i++)
{
s.Children.Add(new ComboBox()
{
VerticalAlignment = VerticalAlignment.Top,
HorizontalAlignment = HorizontalAlignment.Left,
Margin = new Thickness(m, -25, 0, 0),
Width = 75,
Height = 25,
FontSize = 12,
Name = "obj1_" + i.ToString(),
ItemsSource = objs,
});
m = m + 50;
s.Children.Add(new Label()
{
VerticalAlignment = VerticalAlignment.Top,
HorizontalAlignment = HorizontalAlignment.Left,
Margin = new Thickness(m, -25, 0, 0),
Width = 25,
Height = 25,
FontSize = 12,
Name = "lbl1_" + i.ToString(),
});
}
s 是一个堆栈面板,我也在添加每个组合框。 ItemSource 来自其他地方的一个小方法,用于确定哪个列表应该进入下拉列表。
我的问题是,如何为这些创建的组合框调用事件?正在尝试
private void obj1_1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox this_box = (ComboBox)sender;
lbl1_1.Content = "!!!";
}
效果很好,但标签在当前上下文中不存在。
此外,我创建框和标签的方式是否适合此类场景?
提前致谢。
在你的for循环中
1)新建面板
2) 将标签和组合添加到该面板
3)将新建的面板添加到s
在您的 obj1_1_SelectionChanged 活动中:
1)找到ComboBox的Parent控件
2)在其子项中搜索标签并更新其文本
解决方案 2
当您创建控件时,创建一个 Guid(或 int)并将控件的 Tag 属性 设置为该对象。
现在,当您使用组合时,您可以在 Window 中搜索具有相同标签
的标签
for (int i = 0; i < 4; i++)
{
Guid g = Guid.NewGuid();
s.Children.Add(new ComboBox()
{
Tag = g
});
s.Children.Add(new Label()
{
Tag = g
});
}
我正在创建动态创建组合框的小程序。每次用户打开程序时,根据某些上下文,可能有 3-30 个项目需要 4 个下拉列表进行选择。我正在根据以下代码创建这些,这只是一个片段。
for (int i = 0; i < 4; i++)
{
s.Children.Add(new ComboBox()
{
VerticalAlignment = VerticalAlignment.Top,
HorizontalAlignment = HorizontalAlignment.Left,
Margin = new Thickness(m, -25, 0, 0),
Width = 75,
Height = 25,
FontSize = 12,
Name = "obj1_" + i.ToString(),
ItemsSource = objs,
});
m = m + 50;
s.Children.Add(new Label()
{
VerticalAlignment = VerticalAlignment.Top,
HorizontalAlignment = HorizontalAlignment.Left,
Margin = new Thickness(m, -25, 0, 0),
Width = 25,
Height = 25,
FontSize = 12,
Name = "lbl1_" + i.ToString(),
});
}
s 是一个堆栈面板,我也在添加每个组合框。 ItemSource 来自其他地方的一个小方法,用于确定哪个列表应该进入下拉列表。
我的问题是,如何为这些创建的组合框调用事件?正在尝试
private void obj1_1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox this_box = (ComboBox)sender;
lbl1_1.Content = "!!!";
}
效果很好,但标签在当前上下文中不存在。
此外,我创建框和标签的方式是否适合此类场景?
提前致谢。
在你的for循环中
1)新建面板
2) 将标签和组合添加到该面板
3)将新建的面板添加到s
在您的 obj1_1_SelectionChanged 活动中:
1)找到ComboBox的Parent控件
2)在其子项中搜索标签并更新其文本
解决方案 2
当您创建控件时,创建一个 Guid(或 int)并将控件的 Tag 属性 设置为该对象。
现在,当您使用组合时,您可以在 Window 中搜索具有相同标签
for (int i = 0; i < 4; i++)
{
Guid g = Guid.NewGuid();
s.Children.Add(new ComboBox()
{
Tag = g
});
s.Children.Add(new Label()
{
Tag = g
});
}