2011-03-30 34 views
1

我有WPF项目和App.xaml中定义的其他文件中使用的一些资源。当我尝试将App.xaml移动到子目录时,设计师不再能够找到这些资源。由于我使用'Startup'事件而不是'StartupUri',因此我的项目仍在编译。如何告诉设计师在哪里搜索资源?当App.xaml位于项目的根目录时,它如何知道它们在哪里?如何移动App.xaml而不是打破设计器?

更新: 项目文件:

的App.xaml:

<Application x:Class="WpfApplication1.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      Startup="startup"> 
    <Application.Resources> 
     <SolidColorBrush Color="LightGray" x:Key="brush" /> 
    </Application.Resources> 
</Application> 

App.xaml.cs

namespace WpfApplication1 
{ 
    public partial class App : System.Windows.Application 
    { 
     private void startup(object sender, System.Windows.StartupEventArgs e) 
     { 
      new MainWindow().Show(); 
     } 
    } 
} 

MainWindow.xaml:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Height="300" Width="300" Background="{StaticResource brush}" /> 

MainWindow.xaml.cs

namespace WpfApplication1 
{ 
    public partial class MainWindow : System.Windows.Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

更新2: 上传压缩解决方案http://zalil.ru/30771604(下载将自动开始)

镜:http://www.speedyshare.com/files/27697250/WpfApplication1.zip

+0

我看到我做了不同的事情。感谢您的来源。我会修补更多。 – 2011-03-30 22:22:05

+0

我已经更新了我的答案。希望有所帮助! – 2011-03-30 22:32:34

+0

你安装了SP1吗? – 2011-03-30 23:26:31

回答

0

我不能重复的问题我的结局。这是我尝试过的:

我在App.xaml的资源中创建了一个具有样式的应用程序。我将App.xaml移到了一个子目录中。我有另一个窗口,它使用App.xaml资源中定义的样式(他驻留在不同的目录中),它能够很好地解决它。我在我原来的StartupUri的开头添加了.. \。

我做了一些搜索,你使用的是什么版本的Visual Studio?显然,有可能是在VS2008与您问题相关的错误:

http://bengribaudo.com/blog/2010/08/19/106/bug-single-application-resources-entry-ignored

他说此错误解决方法是设置x:Name属性上Application。希望有所帮助!

编辑:我也试过处理Startup事件,而不是使用StartupUri,它仍然工作正常。

public partial class App : Application 
{ 
    private void Application_Startup(object sender, StartupEventArgs e) 
    { 
      new MainWindow().Show(); 
    } 
} 

编辑部分2:

好,我所包围的内部的ResourceDictionary的SolidColorBrush这样:

<ResourceDictionary> 
    <SolidColorBrush Color="LightGray" x:Key="brush" /> 
</ResourceDictionary> 

和窗口拿起刷子。设计师不喜欢它,但是当我从StaticResource更改为DynamicResource时,它停止抱怨。

编辑3:

我只是想到了一些东西。你有没有安装VS2010 SP1?它与设计师一起修复了some bugs

对不起,我的编辑号码2没有按预期工作。我注意到我的蓝色曲线在xaml中消失了,但我没有检查设计师。 x__x

+0

奇怪,我使用的是VS 2010,你做了我想要的,等一下,我会上传测试项目。 – Poma 2011-03-30 22:14:37

+0

上传的解决方案归档。请检查出来。 – Poma 2011-03-30 22:21:16

+0

似乎它不适用于我。添加了ResourceDictionary,并将StaticResource改为了DynamicResource,程序仍然运行成功,但设计者不能解决资源问题。你确定你没有改变别的东西吗? – Poma 2011-03-30 22:38:35

1

1。 App.xaml中移动你想要的位置

App.xaml Moved

2。重构你App.xaml.cs命名空间,以适应新的变化:

Refactor its namespace

3。重建您的解决方案。

[4]。转到您的项目特性,并在新位置将启动对象设置为您的App.xaml文件。

set the Startup object to your App.xaml

[5]。运行你的应用程序,它应该成功工作:)

+0

这里同样的情况,项目构建,但设计器不起作用。 – Poma 2011-03-30 22:18:28