尝试将MainWindow继承为子类,但得到系统stackoverflow

时间:2019-04-26 08:23:13

标签: c# wpf oop inheritance

我正在尝试向WPF事件处理程序发送额外的变量。

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

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();行中。坏了

我知道这段代码是一团糟,不是应该这样做,但是我还没有找到在WPF事件处理程序中发送和更改变量的可行解决方案。如果除了这种遥远的方法之外还有其他解决方案,那么如果我要问的事情无法实现,那就欢迎说。

谢谢(抱歉这个罗word的问题)

1 个答案:

答案 0 :(得分:1)

您可以将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();
}