为什么我的动态点击事件不起作用? (附代码)

时间:2010-11-29 10:11:13

标签: wpf

我有一些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;
    }

2 个答案:

答案 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的性质:)