为了账号安全,请及时绑定邮箱和手机立即绑定

如何从另一个窗口调用MainWindow方法?

如何从另一个窗口调用MainWindow方法?

C#
HUX布斯 2023-08-13 09:40:19
我需要从另一个窗口中的 MainWindow 调用方法。问题是我不知道为什么会出现错误,我想修复它。我尝试使用各种方式调用该函数,但没有一个起作用。这是我最后一次尝试:我想打电话:namespace Class1{    public partial class MainWindow : Window    {        ...        public void SkipVideo()        {            ...        }    }}这是我尝试拨打电话的方式:namespace Class1{    public partial class TimeWindow : Window    {        ...        private void DemoVideo_MediaEnded(object sender, RoutedEventArgs e)        {            ((MainWindow)Application.Current.MainWindow).SkipVideo();        }    }}没有构建错误,但是当我运行该程序时,它会执行以下操作: System.InvalidCastException: 'Unable to cast object of type 'Class1.TimeWindow' to type 'Class1.MainWindow'.'
查看完整描述

3 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

这InvalidCastException意味着您的应用程序的主窗口是TimeWindow.


如果确实有一个MainWindowopen,你可以像这样获取它的引用:


private void DemoVideo_MediaEnded(object sender, RoutedEventArgs e)

{

    MainWindow mainWindow = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();

    if (mainWindow != null)

        mainWindow.SkipVideo();

}

有更好的方法来处理这个问题,例如使用 @Christopher 建议的 MVVM 设计模式,但这可能是考虑到您当前设置的最简单的方法。


查看完整回答
反对 回复 2023-08-13
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

- 只是你应该在 MainWindow 类中执行此代码:


    public partial class MainWindow : Window

    {

            public static MainWindow _instance;

            public MainWindow()

            {

                _instance = this;

                InitializeComponent();

            }

private void SkipVideo()

{


}

    }

- 现在你可以调用任何方法、用户控件等:


public partial class TimeWindow : Window

{

    ...

    private void DemoVideo_MediaEnded(object sender, RoutedEventArgs e)

    {

        MainWindow._instance.SkipVideo();

    }

}


查看完整回答
反对 回复 2023-08-13
?
FFIVE

TA贡献1797条经验 获得超6个赞

需要向实例TimeWindow传递对mainWindow实例的引用,以调用mainWindow.SkipVideo(). 通常,当您TimeWindowmainWindow. TimeWindow 中的公共属性或构造函数参数可用于提交实例。

但是,您使用的是 WPF,这是一种 Windows 窗体编程方法。WPF/UWP 的设计考虑了 MVVM 模式。这不是 MVVM 模式。虽然您可以使用旧方法,但这样做会错过 WPF 大约 90% 的功能,并且在其他各个方面都会遇到问题。如果你打算在 WPF 中工作,你肯定需要学习 MVVM。MVVM 包括一种像这样跨 Windows 共享数据/功能的方法。


查看完整回答
反对 回复 2023-08-13
  • 3 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信