WPF: обработчики событий в конструкторе Codebehind не подключаются - PullRequest
1 голос
/ 20 января 2010

Сидеть Реп У меня есть приложение WPF. В конструктор кода (C #) я прикрепляю кнопку-обработчик событий. Проблема в том, что он не привязан! Но если я прикреплю его нажатием кнопки пользовательского интерфейса, то кнопка работает нормально. Также, конечно, если я добавлю его в XAML кнопки, он тоже будет работать.

Итак, похоже, что проба присоединяет обработчик в конструкторе. Кажется, еще слишком рано.

Приложение 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);
            };
    }

Спасибо заранее за любую помощь!

Gregg

1 Ответ

0 голосов
/ 20 января 2010

Попробуйте подключить обработчик после вызова InitializeComponent (); в конструкторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...