如何在一个方法中创建控件并管理其事件?

时间:2010-08-04 20:05:45

标签: c# wpf controls dispatcher

我仍然被困住了。

假设我有一个带按钮的用户控件。还有一个名为damnIt_ButtonClicked的事件。 在主窗口中,我想模仿控件的生命周期,就像它是一个模态对话框,尽管它不是。

我想将所有内容都包装到一个方法中,如果控件上的Button单击,则返回true。

  public bool Show() {

      var control = new ControlWithSingleButton();
      bool result;

      control.damnIt_ButtonClicked += (object sender, EventArgs args) =>
      {
            result = true;
      };

      MainWindowGrid.Children.Add(control);
      MainWindowGrid.Visibility = Visibility.Visible;


      return result;
  }

现在。如您所见,问题是此方法将始终返回false; 但是只有当damnIt_ButtonClicked事件触发时我才需要返回结果。这意味着我必须让线程等待,直到用户点击按钮。 对?或者应该怎么做。请帮帮我....

2 个答案:

答案 0 :(得分:0)

您需要重新构建解决方案。如果不知道你想要做的更广泛的范围,这是一个可能的解决方案。

private bool buttonResult;

public void Show() {

  var control = new ControlWithSingleButton();
  bool result;

  control.damnIt_ButtonClicked += (object sender, EventArgs args) =>
  {
        this.ProcessButtonClick();
  };

  MainWindowGrid.Children.Add(control);
  MainWindowGrid.Visibility = Visibility.Visible;

  }

private void ProcessButtonClick()
{
   this.buttonResult = true;
   //do whatever you would have before if Show had returned true
}

答案 1 :(得分:0)

你知道吗?我放弃!

我决定让控件成为一个窗口,虽然在给定的规格中严格禁止使用除Main之外的任何其他窗口。无论如何,它将是一个无边框,无边框的透明窗口,所以没有人能看到差异。

非常感谢你。