在另一个用户控件中执行方法的单独用户控件

本文关键字:控件 用户 单独 方法 另一个 执行 | 更新日期: 2023-09-27 18:34:11

我正在 WPF 中制作一个小游戏以更好地理解它,我有一个父控件,它有 2 个子用户控件。

第一个子用户控件具有更新对象在第二个用户控件中的位置的按钮。

在 MainWindow.xaml 中.cs我有

controllersplaceholder.Content = new ControllerView1()
gameplaceholder.Content = new GameView1() 

如您所见,控制器占位符对 GameView1 一无所知。要更新 GameView1 中元素的位置,我必须将 GameView1 引用传递到 ControllerView1 中,并在 GameView1() 中执行方法。问题是我该怎么做才能做到控制器视图1,控制器视图2将轻松执行游戏视图1中的方法。

在另一个用户控件中执行方法的单独用户控件

您可以使用事件。只需在您的ControllerView1上声明一个事件,例如:

public event EventHandler RequestReposition;

创建对象时,GameView1订阅并响应控制器的事件:

var controller = new ControllerView1();
var gameView = new GameView1();
// here we're subscribing to controller's event
controller.RequestReposition += gameView.UpdatePosition;
controllersplaceholder.Content = controller;
gameplaceholder.Content = gameView;

现在,每当您从控制器引发事件时,订阅者都将收到通知并采取适当的操作(执行订阅的方法)。

请注意,您的游戏视图方法不必完全匹配事件签名;借助匿名方法的一点帮助,您可以动态创建匹配的事件处理程序,并使用 GameView1 中现有的方法:

// subscribtion with lambda
controller.RequestReposition += (sender, args) =>
    {
        gameView.UpdatePosition();
        gameView.Refresh();
    };