以编程方式触发事件并将值传递给第二页?

时间:2019-10-23 08:54:05

标签: c# uwp routed-events

我想将一个值从Mainpage传递给Page2。当我单击Button_Click时,变量“ t”将传递给Page2。

但是,我需要从代码中触发Button_Click事件,但是随后引发了“ NullReferenceException”。

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        Button_Click(new object(), new RoutedEventArgs());
    }

    public void Button_Click(object sender, RoutedEventArgs e)
    {
        string t = "Test";
        navigate_page2(t);
    }

    public void navigate_page2(string t)
    {
        this.Frame.Navigate(typeof(Page2), t);
    }
}

Button_Click(new object(), new RoutedEventArgs());触发Button_Click事件以执行操作,除非调用了“ navigate_page2”。

直接单击并从代码触发按钮有什么区别?我猜它一定是“新的RoutedEventArgs”,但我不知道该如何处理...谢谢您的答复!

2 个答案:

答案 0 :(得分:1)

请不要直接调用Button_Click,该方法与XAML中的事件相关联。

如果要重用Button_Click事件中的代码,可以将其打包为调用方法。

更新

  

,但是会引发“ NullReferenceException”。

问题出在this.Frame中。对于您当前的页面,this.Frame不存在。您需要在xaml中创建一个子框架。

<Grid>
    <Frame x:Name="MainFrame"/>
</Grid>
public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        btn_handle();
    }

    public void Button_Click(object sender, RoutedEventArgs e)
    {
        btn_handle();
    }

    public void btn_handle()
    {
        string t = "Test";
        navigate_page2(t);
    }

    public void navigate_page2(string t)
    {
        MainFrame.Navigate(typeof(Page2), t);
    }
}

最诚挚的问候。

答案 1 :(得分:0)

据我所知,您正在尝试将值从一页传递到另一页,下面以两个表单为例,您需要通过单击按钮的触发将一个值从表单传递到另一表单。

Form2

public partial class Form2 : Form
{
    public event EventHandler TextEvent;

    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.Hide();
        if (TextEvent != null)
        {
            TextEvent(label1.Text, null);
        }
    }
}

Form1

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 obj = new Form2();
        obj.Show();
        obj.TextEvent += obj_TextEvent;
    }

    void obj_TextEvent(object sender, EventArgs e)
    {
        label1.Text = sender.ToString();
    }
}

我在这里做的是我在Form2中创建了一个事件,该事件在单击Form2的Button1时触发,并且数据作为发送方传递到Form1,其中,Form2 obj启动了该事件,并将Form1的label1设置为label1.Text = sender.ToString();

相关问题