2010-09-23 58 views
3

是否有一些技巧已知告诉混合停止尝试在我的app.xaml中设置一个startupURI?我Google搜索,但没有看到任何东西,所以我想我会问在这里。防止混合添加一个startupURI到应用程序?

我使用一个启动程序并自己实例化mainwindow。当我让它编译时,每一次和一段时间混合喜欢在startupURI =“MainWindow.xaml”中折腾。偶尔我会看到一些信息:“这个项目没有任何启动场景,你想混合等等等等等等吗?”或类似的规定。我点击取消/否,但它仍然在我的代码中抛出一个gremlin。内部混合有一些检查此属性的机制,或者它不会通过对话框向我投诉。那么,我该如何告诉它“不,谢谢混合,我没有这个好?”,哈哈。

它很烦人。我打开混合来做一些简单的事情,比如使用颜色选择器并使用它来编译,因为VS2010没有打开。我的结果是两个主要窗口。但它不会每次都这样做,所以它不是一个可重复的行为。编译器只是随机动作。

编辑:我使用混合4但我看到这种情况发生时,我也使用混合3。

+0

我第二是,它显然是恼人的,当你需要从statup代码实例化你的窗口! – 2010-10-15 20:31:46

+0

我希望Blend团队的成员经常参加这个论坛,并且可以在下一个Blend版本中包含此修复或至少一个复选框选项。这种情况至少每周至少发生三次。我尽量不要用混合来构建我的项目,但我必须多次这样做才能让我的视觉效果在美工板上刷新。在构建它时,需要使用活动的.xaml文件(窗口,页面,用户控件)并将其设置为启动。 – TWood 2010-11-10 15:41:52

回答

0

这是一个可怕的,可怕的黑客,但嘿,它的作品。默认情况下,StartupUri为null,但无法使用该属性将其设置为null,因此如果您想生活在边缘,则可以绕过该属性。

// Dangit blend! Stop inserting a stupid StartupUri  
private void FixStartupUri() 
{ 
    var type = typeof(Application); 
    var startupUri = type.GetField("_startupUri", BindingFlags.Public 
     | BindingFlags.NonPublic 
     | BindingFlags.Instance); 
    startupUri.SetValue(this, null); 
} 

添加到您的应用程序类,并调用它像这样:

protected override void OnStartup(StartupEventArgs e) 
{ 
    FixStartupUri(); 
    base.OnStartup(e); 
    // Do the rest of your startup stuff. 
} 
相关问题