我的主窗口中有一个StatusBar
,我的主窗口中还有UserControl
的副本。在UserControl
中的事件处理程序中,我想更新主窗口中的StatusBar
。这样做的最佳方式是什么?有没有办法在object sender
的事件处理程序中RoutedEventArgs e
或UserControl
访问我的主窗口实例?
修改:感谢lukas's answer和this tutorial,我提出了以下解决方案:
添加到我的UserControl
:
public delegate void UpdateStatusBarEventHandler(string message);
public event UpdateStatusBarEventHandler UpdateStatusBar;
在InitializeComponent
之后添加到我的主窗口的构造函数:
uct_requiredFields.UpdateStatusBar += updateStatusBar;
我将这个方法添加到我的主窗口:
private void updateStatusBar(string message)
{
sti_mainStatus.Content = message;
}
然后,在我的UserControl
中,我可以执行以下操作来更新状态栏:
if (null != UpdateStatusBar)
{
UpdateStatusBar("woot, message");
}
答案 0 :(得分:5)
我会通过我自己的委托或定义
向UserControl添加一个事件public event UpdateStatusBar UpdateBar;
然后通过UserControl中的按钮单击(或您使用的其他东西)来升级它
private void UserContolButton_Click(object sender, RoutedEventArgs e)
{
if(UpdateBar != null)
UpdateBar(); // send here the message
}
我假设你在主窗口中有一个UserControl实例 在构造函数中
myUserControl.UpdateBar += MyMethodWhichUpdatesStatusBar();