2016-04-11 34 views
0

我试图将一个非常小的C#控制台应用程序转换为WPF应用程序。它需要一些参数,做一些工作,并可能会出现一个MessageBox。WPF WindowLess MessageBox

我将它从控制台应用程序移动到WPF,因为它应该运行不可见,除非它有错误消息。

到目前为止,hitch已经让它显示MessageBox。以下是真正的短版本,它编译,运行...但不显示MessageBox。

namespace MyApp{ 
    public class EntryPoint { 
    [STAThread] 
    public static void Main(string[] args) { 
     App app = new App(); 
     app.Run(); 
     MessageBox.Show("test", "test", MessageBoxButton.YesNo, MessageBoxImage.Question); 
    } 
    } 
} 

任何人都知道如何得到那讨厌的MessageBox来显示,而没有主程序窗口?

+0

'app.Run'直到程序退出后才会完成,所以对'MessageBox'的调用将不会像您期望的那样执行。您必须将'MessageBox'移到代码中的其他位置。我们不能更具体地说,因为您没有向我们展示任何其他代码。 –

+0

这实际上就是它所有。我对WPF完全陌生,不确定如何构建一个无窗口应用程序。 – ltwally

+0

您可以将所有代码放入app.xaml中的应用程序启动事件中,并删除所有表单。 –

回答

0

最好的办法可能是尝试运行应用程序的Startup事件中的代码。请记住,WPF的设计并非真正用于这种方式,所以可能会有一些奇怪的怪癖。 。

开始通过在Solution Explorer中打开“App.xaml`的XAML的根应该是这个样子:

<Application x:Class="Configurator.Application.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:local="clr-namespace:FoodSafetyConfigurator" 
      xmlns:s="clr-namespace:Configurator.Application.Properties" 
      StartupUri="MainForm.xaml"> 

取出StartupUri="MainForm.xaml"属性,并与Startup="App_OnStartup"更换这将停止WPF默认显示一个窗口,并将启动事件挂接到名为App_Starup的“App.xaml.cs”中的方法

现在在解决方案资源管理器中展开“App.xaml”,并打开“App.xaml.cs” ;这是“App.xaml”文件后面的代码,添加一个名为App_OnStartup的方法,它将会我们之前提到的事件的目标。它应该看起来像这样:

private void App_OnStartup(object sender, StartupEventArgs e) 
{ 
    //Your code goes here. 
} 

添加任何代码,你想运行在这里。任何与MessageBox.Show()显示的消息框应该正确显示,但我没有实际测试过它。

+0

我很抱歉...但这真的是我的第一个WPF应用程序。而且我不确定将App.xaml.cs文件中描述的函数放在哪里。 – ltwally

+0

任何地方在类 –

+0

所以,你的意思是这个取代Main()? – ltwally

0

我结束了一个标准的Windows窗体应用程序,只是删除表单。弄清楚如何让WPF做到这一点非常耗时,令人沮丧并最终失败。表格可能不是新的热点,但它有效。