如何移动App.xaml而不是打破设计师?

时间:2011-03-30 20:38:53

标签: c# .net wpf xaml

我有WPF项目和App.xaml中定义的一些资源,这些资源在其他文件中使用。当我尝试将App.xaml移动到子目录设计器时,无法再找到这些资源。我的项目仍在编译,因为我使用'Startup'事件而不是'StartupUri'。如何告诉设计师在哪里搜索资源?当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

2 个答案:

答案 0 :(得分:3)

1。将App.xaml移动到您想要的位置

App.xaml Moved

2。重构App.xaml.cs命名空间以适应新的更改:

Refactor its namespace

3。重建您的解决方案。

[4]。转到项目属性并将Startup对象设置为新位置的App.xaml文件。

set the Startup object to your App.xaml

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

答案 1 :(得分: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部分:

好的,我将SolidColorBrush包含在ResourceDictionary中:

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

窗户拿起画笔。设计师不喜欢它,但是当我从StaticResource更改为DynamicResource时,它停止了抱怨。

编辑3:

我只是想到了什么。你安装了VS2010 SP1吗?它与设计师修复了some bugs

抱歉,我的第2号编辑没有按预期工作。我注意到我的蓝色波浪线在xaml中消失了,但我没有检查设计师。 x__x