wpf 如何在一个页面中调用另一个页面的函数

今天我做了两个页面,想在一个一页面中调用另一个页面的定义的函数,对于大神来说,不就新建一个对象就可以了,当然可以了。
后来我又想调用另一个页面的鼠标点击操作的事件,并获得鼠标点击的坐标,我想调用另一个页面的事件,怎么办啊,我百般无奈之下,就是别一个页面写了一个函数,高这个页面的对象调用 。可是怎么给事件传参数啊,事件的参数就有两个了,一个是事件发生的名子,一个是事的名子,妈的,现在可头痛了,
网上说鼠标的虚拟点击,可是我看了看,看不懂啊。求大神给我说一下,
也许多年之后我懂了,还会更新这篇博客的。

### 如何在WPF中通过依赖注入实现类间方法调用 为了理解如何在 Windows Presentation Foundation (WPF) 中利用依赖注入(DI)来使一个类能够调用一个类的方法,可以考虑使用现代 .NET 应用程序结构以及设计模式如MVVM(Model-View-ViewModel)[^2]。 #### 创建服务接口和服务实现 定义一个简单的 `IStudentService` 接口及其具体实现: ```csharp // IStudentService.cs public interface IStudentService { void AddStudent(string name); } // StudentService.cs public class StudentService : IStudentService { public void AddStudent(string name) { Console.WriteLine($"Adding student with name: {name}"); } } ``` 此部分展示了如何分离接口与其具体的实现[^4]。这允许更灵活地替换不同版本的服务而无需更改大量现有代码。 #### 配置依赖注入容器 在应用程序启动时配置 DI 容器并注册所需的服务类型。对于基于 .NET Core 或更高版本的应用程序来说,在 `App.xaml.cs` 文件内完成这项工作是很常见的做法: ```csharp using Microsoft.Extensions.DependencyInjection; using System.Windows; namespace AyWpfNet6 { public partial class App : Application { private readonly ServiceProvider _serviceProvider; public App() { var serviceCollection = new ServiceCollection(); ConfigureServices(serviceCollection); _serviceProvider = serviceCollection.BuildServiceProvider(); } private void ConfigureServices(IServiceCollection services) { services.AddSingleton<IStudentService, StudentService>(); services.AddTransient<MainWindow>(); } protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); MainWindow mainWindow = _serviceProvider.GetRequiredService<MainWindow>(); mainWindow.Show(); } } } ``` 这段代码片段说明了如何初始化服务集合并将它们绑定到特定的实现上[^3]。这里还显示了如何获取主窗口实例并通过构造函数参数自动解析所需的依赖项。 #### 使用依赖注入消费服务 最后一步是在需要的地方声明对这些已注册服务类型的依赖关系。例如,在 `MainWindow.xaml.cs` 中可以通过构造函数接收 `IStudentService` 的实例,并在其内部调用相应的方法: ```csharp using AyWpfNet6.Services; using Microsoft.Extensions.Logging; using System.Windows; namespace AyWpfNet6 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { private readonly ILogger<MainWindow> logger; private readonly IStudentService studentService; public MainWindow( IStudentService studentService, ILogger<MainWindow> logger) { InitializeComponent(); this.studentService = studentService; this.logger = logger; } private void Button_Click(object sender, RoutedEventArgs e) { string studentName = "John Doe"; studentService.AddStudent(studentName); logger.LogInformation($"{studentName} was added."); } } } ``` 上述例子表明,当按钮被点击时,会触发 `Button_Click` 方法执行并向控制台打印一条消息表示学生已被成功添加。这种方式不仅简化了对象之间的协作方式,同时也提高了测试性和可维护性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值