我有一些itemsControl,我动态地将它添加到StackPanel作为项目。 每个StackPanel都包含2个按钮--btn1,btn2。 我动态地将每个按钮连接到某个按钮事件(所有按钮事件都相同)。
当我测试它时 - 我看到事件不是按下单击按钮 - 我没有看到任何理由。
守则:
private StackPanel CreatePanel()
{
StackPanel stackPanel = new StackPanel();
stackPanel.Orientation = Orientation.Horizontal;
for (int i = 0; i < 2; i++)
{
Button btn = new Button();
btn.Height = btn.Width = 100;
btn.Content = i % 2 == 0 ? "Btn1" : "Btn2";
// Event connection
btn.Click += new RoutedEventHandler( button1_Click );
stackPanel.Children.Add(btn);
}
return stackPanel;
}
答案 0 :(得分:1)
尝试以下代码,适合我。请注意grd是我的XAML上的网格
为ItemsControl编辑了添加的代码
<强> XAML 强>
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<ScrollViewer >
<Grid>
<ItemsControl Name="grd">
</ItemsControl>
</Grid>
</ScrollViewer>
<强>代码强>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
grd.Items.Add(CreatePanel()); // Now grd is a itemsControl
}
private StackPanel CreatePanel()
{
StackPanel stackPanel = new StackPanel();
stackPanel.Orientation = Orientation.Horizontal;
for (int i = 0; i < 2; i++)
{
Button btn = new Button();
btn.Height = btn.Width = 100;
btn.Content = i % 2 == 0 ? "Btn1" : "Btn2";
// Event connection
btn.Click += new RoutedEventHandler(doCall);
stackPanel.Children.Add(btn);
}
return stackPanel;
}
private void doCall(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hi");
}
}
答案 1 :(得分:1)
从MSDN:对于输入事件和WPF控件类的某些组合,引发事件的元素不是第一个有机会处理它的元素。
这是RoutedEventHandler的性质:)