c# - MainWindow 不是启动窗口时的引用实例
问题描述
我正在为大学做一些申请,并且我已经成功地能够在我的应用程序中显示和折叠用户控件,但是当我尝试做的窗口不是应用程序启动时启动的窗口时,它就不起作用了。
当我单击其中一个标签(充当菜单)时,我有一个鼠标事件起作用:
class MouseEvents
{ public void MouseClick(object sender)
{
//creating an instance of MainWindow to be able to reference the labels and user controls
MainWindow mainWindow = (MainWindow)Application.Current.MainWindow;
List<Label> menuDown = new List<Label> { mainWindow.toolAddPlayer, mainWindow.toolSearchPlayer, mainWindow.toolAddMember, mainWindow.toolSearchMember, mainWindow.toolEditPass, mainWindow.toolEmailList };
List<UserControl> userDown = new List<UserControl> { mainWindow.addPlayer, mainWindow.searchPlayer, mainWindow.addMember, mainWindow.searchMember, mainWindow.editPassword, mainWindow.EmailList };
var menuItem = (Label)sender;
for (int i = 0; i < 6; i++)
{
if (menuItem.Content == menuDown[i].Content)
{
HideUserControls();
userDown[i].Visibility = Visibility.Visible;
}
}
}
public void HideUserControls()
{
MainWindow usingControls = (MainWindow)Application.Current.MainWindow;
usingControls.addPlayer.Visibility = Visibility.Collapsed;
usingControls.searchPlayer.Visibility = Visibility.Collapsed;
usingControls.addMember.Visibility = Visibility.Collapsed;
usingControls.searchMember.Visibility = Visibility.Collapsed;
usingControls.editPassword.Visibility = Visibility.Collapsed;
usingControls.EmailList.Visibility = Visibility.Collapsed;
}
}
在我希望用户控件出现或消失的窗口 xaml (MainWindow.xaml) 上,我有这段代码
<StackPanel DockPanel.Dock="Bottom" Height="440" Width="590">
<local:AddPlayer x:Name="addPlayer" Visibility="Collapsed"/>
<local:SearchPlayer x:Name="searchPlayer" Visibility="Collapsed"/>
<local:AddMember x:Name="addMember" Visibility="Collapsed"/>
<local:SearchMember x:Name="searchMember" Visibility="Collapsed"/>
<local:EditPassword x:Name="editPassword" Visibility="Collapsed"/>
<local:EmailList x:Name="EmailList" Visibility="Collapsed"/>
</StackPanel>
而且效果很好。问题是当我想添加一个窗口来登录应用程序时(当我单击登录按钮时,这个登录窗口将加载 MainWindow.xaml)。我更改了我的 App.xaml 以将 StartupUri 更新为 LogIn.xaml
<Application x:Class="SimplyRugby_2._0.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SimplyRugby_2._0"
StartupUri="LogIn.xaml">
<Application.Resources>
</Application.Resources>
</Application>
因此,应用程序在登录窗口中正常启动。当我尝试单击 MainWindow 窗口上的菜单时,问题就出现了。
我得到的不是对对象错误实例的引用。我一直在查看 StackOverflow 和谷歌,但我似乎真的找不到解决方案。我不知道如何引用它。我在 MainWindow 是我初始化应用程序时启动的窗口时这样做了,但如果它不是第一个窗口,它只会给我错误
System.NullReferenceException: 'Object reference not set to an instance of an object.'
mainWindow was null.
我究竟做错了什么?
非常感谢你提前
解决方案
我找到了我的问题和解决方案,所以我会在这里发布以防万一有人遇到类似问题。
我的主要问题是,当窗口是启动窗口时,我不明白为什么它可以工作,但不是。我只需要 MainWindow 的一个实例(它不是启动窗口)。
class MouseEvents
{
private MainWindow WindowMain { get; set; }
public MouseEvents(MainWindow window)
{
this.WindowMain = window;
}
public void MouseClick(object sender)
{
List<Label> menuDown = new List<Label> { WindowMain.toolAddPlayer, WindowMain.toolSearchPlayer, WindowMain.toolAddMember, WindowMain.toolSearchMember, WindowMain.toolEditPass, WindowMain.toolEmailList };
List<UserControl> userDown = new List<UserControl> { WindowMain.addPlayer, WindowMain.searchPlayer, WindowMain.addMember, WindowMain.searchMember, WindowMain.editPassword, WindowMain.emailList };
Label menuItem = (Label)sender;
for (int i = 0; i < 6; i++)
{
if (menuItem.Content == menuDown[i].Content)
{
HideUserControls();
userDown[i].Visibility = Visibility.Visible;
}
}
}
public void HideUserControls()
{
WindowMain.addPlayer.Visibility = Visibility.Collapsed;
WindowMain.searchPlayer.Visibility = Visibility.Collapsed;
WindowMain.addMember.Visibility = Visibility.Collapsed;
WindowMain.searchMember.Visibility = Visibility.Collapsed;
WindowMain.editPassword.Visibility = Visibility.Collapsed;
WindowMain.emailList.Visibility = Visibility.Collapsed;
}
}
然后更新 MainWindow 中调用 MouseEvent 类上的 MouseClick 事件的方法。
private void LeftClick(object sender, RoutedEventArgs e)
{
MouseEvents menu = new MouseEvents(this);
menu.MouseClick(sender);
}
推荐阅读
- java - 我无法在 spark2 中设置 StreamingLogLevel
- swift - 将 socket.io 客户端从 9.0.1 升级到 13.2.1 后无法连接
- php - 在mysql中计算总成本
- r - R:计算在列可互换的数据框中找到的不同组合
- javascript - Boostrap 模态表单不在服务器上执行 POST 方法
- javascript - 如何将数据资源从 api 推送到 arrayToDataTable 谷歌图表
- json - Haskell Servant 自定义 JSON 解析错误
- c# - IHttpHandler 未在 MVC 控制器操作方法上被调用
- amazon-web-services - 在 ElasticBean Stalk 上部署 Flask 应用程序时遇到问题
- c - 如何记录源代码功能,如基于 Unix 的手册?