首页 > 解决方案 > 试图将 MainWindow 继承到子类中但得到系统 stackoverflow

问题描述

如何在事件处理程序方法中通过引用发送变量?

我尝试使用委托将其发送到另一个保存我需要的变量的函数并且它可以工作。但是,它会创建变量的副本,并且我无法从委托函数更改主类中的值。然后我考虑将函数移动到一个类并将所有变量存储在类中,以便它们可以获取和设置。但是,因为它是一个类并且不继承主类,所以无法找到 WPF/XAML 对象。我尝试过继承主类,但是因为我在主类中创建了这个类,并且它有效地继承了自己,所以它进入了一个无法逃脱的循环。

public partial class MainWindow : Window
{

    public class Program : MainWindow
    {
        public string Word { get; set; }

        public void WhenPressed_1(object sender, RoutedEventArgs e)
        {
            lable_1.Content = Word;
        }
    }
    public MainWindow()
    {            
        InitializeComponent();

        Program test = new Program();
        Button_1.Click += delegate (object sender, RoutedEventArgs e) { test.WhenPressed_1(sender, e); };
    }       
}

它位于 Program test = new Program(); 它打破了。

标签: c#wpfoopinheritance

解决方案


您可以将 MainWindow 对象传递给程序类并更改所需的值

   public partial class MainWindow : Window, ICommon
{

    public MainWindow()
    {
        InitializeComponent();
        Program test = new Program();
        thisButton.Click += delegate(object sender, RoutedEventArgs e) { test.WhenPressed_1(this); };
    }

    public void SetValueInMain()
    {
        // Set Main values
    }

    public class Program
    {
        public string Word { get; set; }
        public void WhenPressed_1(ICommon mainWind)
        {
            mainWind.SetValueInMain();
        }
    }
}

public interface ICommon
{
    void SetValueInMain();
}

推荐阅读