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

C# 以编程方式触发事件并将值传递给第二页?,c#,uwp,routed-events,C#,Uwp,Routed Events,我想将一个值从主页传递到第2页。当我点击按钮时,变量“t”被传递到第2页 但是,我需要从代码中触发Button_Click事件,但随后会引发“NullReferenceException” public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); Button_Click(new object(), new Routed

我想将一个值从主页传递到第2页。当我点击按钮时,变量“t”被传递到第2页

但是,我需要从代码中触发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);
    }
}
按钮\单击新建对象、新建路由目标;触发按钮单击事件来执行操作,调用导航页面2时除外

直接点击和从代码中触发按钮有什么区别?我猜这是新的RoutedEventArgs,但我不知道如何处理。。。谢谢您的回复

请不要直接单击按钮,此方法与XAML中的事件关联

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

更新

但随后会抛出一个“NullReferenceException”

问题就在这个框架中。对于当前页面,此.Frame不存在。您需要在xaml中创建一个子帧

公共密封部分类主页面:第页 { 公共主页 { this.InitializeComponent; btn_手柄; } 公共作废按钮\u单击对象发送器、路由目标 { btn_手柄; } 公共无效btn_手柄 { 字符串t=测试; 浏览第2t页; } 公共无效导航\u第2页字符串t { MainFrame.NavigatetypeofPage2,t; } }
致以最诚挚的问候。

据我所知,您正试图将一个值从一个页面传递到另一个页面,让我们以两个表单为例,您需要通过点击按钮将一个值从一个表单传递到另一个表单

表格2

表格1


在这里,我所做的是在Form2中创建一个事件,该事件在单击Form2的按钮1时触发,数据作为发送者传递到Form1,其中Form2 obj已启动该事件,并将Form1的label1设置为label1.Text=sender.ToString

替换按钮\u单击新建对象、新建路由目标;用按钮_单击发送者,e;这将触发事件而不会得到NullReferenceException-如果您遇到更多困难,请分享更多信息:引用此代码不是我的第一条注释更容易。。。?您提供的链接似乎使用了所有这些复杂的代码,尽管它可能会非常、非常简单:不过我喜欢这篇文章!另外,删除不必要的代码。InitializeComponent;,并初始化组件;-它占用空间,而且不需要:@Momoro。当我像你说的那样简单地替换时,sender和e在当前上下文中不存在。似乎它与按钮点击事件的参数不匹配…问题是关于UWP,而不是WinFormsOK不是一个问题,如果你要为触发器创建一个事件,它的工作原理是一样的,基本上这是一个理解或说参考的例子。不幸的是,我也得到了NullReferenceException。我需要特殊的使用指令吗?而且,这是UWP标记的,但没有明确提及…嗨,我修正了我的答案,请检查。张。真管用!虽然我还不明白为什么会这样。我以为我的MainPage.xaml就是从这里转到Page2.xaml的。而且,我更不明白为什么点击按钮就不需要这个额外的主机…尽管如此,您的解决方案解决了我的问题,最终我会理解的,同时在C语言中进步。非常感谢您的帮助,Richard Zhang!在UWP中,页面总是需要帧来渲染,就像您总是在浏览器窗口中打开网页一样。如果要导航到第2页,则需要一个框架来渲染它,但不幸的是,在当前条件下,此.Frame不存在,可以使用var Frame=Window.current.Content作为框架;要获取当前窗口的根框架,它也是有效的。
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);
        }
    }
}
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();
    }
}