WPF:Codebehind的构造函数中的事件处理程序没有挂钩

时间:2010-01-19 21:50:54

标签: wpf constructor event-handling

Sit Rep 我有一个WPF应用程序。在(C#)代码隐藏的构造函数中,我附加了一个按钮事件处理程序。问题是,它没有附加!但是,如果我通过单击UI按钮附加它,那么按钮工作正常。当然,如果我在按钮的XAML中附加它也可以。

因此,看起来prob正在构造函数中附加处理程序。这个过程似乎还为时过早。

App Image

这就是我想要的,但没有附上:

public MainWindow()
{
   InitializeComponent();

   //...
   //
   //  TEST RADIO BUTTONS
   //
   //  THIS HANDLER DOESN'T ATTACH!
   ui_Test.Click += (object sender, RoutedEventArgs e) =>
   {
       bool localOnly = Convert.ToBoolean(ui_rdoLocal.IsChecked);
       bool onlineOnly = Convert.ToBoolean(ui_rdoOnline.IsChecked);
       bool both = Convert.ToBoolean(ui_rdoBoth.IsChecked);

       string message = "Local: {1}{0}Online: {2}{0}Both: {3}".Put(nl, localOnly, onlineOnly, both);
       MessageBox.Show(message);
    };

   //...
}

这是第二个测试按钮的代码,通过单击按钮附加上面的代码。此处理程序在XAML中设置。处理程序然后工作,但我想在C#中附加处理程序,而不是XAML。

<Button Name="ui_Test2" Content="Attach Annonymous Handlers" Margin="30,10" Click="ui_Test2_Click"></Button>

方法:

    /// <summary>
    /// Attaches control handlers. Will they attach now? YES!!
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void ui_Test2_Click(object sender, RoutedEventArgs e)
    {
        ui_Test.Click += (object sndr, RoutedEventArgs rea) =>
            {
                bool localOnly = Convert.ToBoolean(ui_rdoLocal.IsChecked);
                bool onlineOnly = Convert.ToBoolean(ui_rdoOnline.IsChecked);
                bool both = Convert.ToBoolean(ui_rdoBoth.IsChecked);

                string message = "Local: {1}{0}Online: {2}{0}Both: {3}".Put(nl, localOnly, onlineOnly, both);
                MessageBox.Show(message);
            };
    }

提前获取任何帮助!

格雷格

1 个答案:

答案 0 :(得分:0)

尝试在调用InitializeComponent()之后附加处理程序;在构造函数中。