1
votes

I have WPF project and some resources defined in App.xaml that are used in other files. When I try to move App.xaml to subdirectory designer is no longer able to find those resources. My project still compiles since I use 'Startup' event instead of 'StartupUri'. How to tell the designer where to search for resources? How it knows where they are when App.xaml is in root of project?

Update: Project files:

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();
        }
    }
}

Update 2: Uploaded zipped solution to http://zalil.ru/30771604 (download will start automatically)

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

2
I see what I did differently. Thanks for the source. I'll tinker a bit more.Ashley Grenon
I've updated my answer. Hope that helps!Ashley Grenon
Yes. Windows 7 x64 SP1, VS 2010, Target framework v3.5 SP1Poma
Well I meant VS2010 SP1. I installed it and it didn't resolve your problem. :(Ashley Grenon

2 Answers

0
votes

I can't duplicate the problem on my end. Here's what I tried:

I created a application with a style in the resources of App.xaml. I moved App.xaml to a subdirectory. I have another window that uses the style defined in the resources of App.xaml (he resides in a different directory) and it was able to resolve it just fine. I added ..\ to the beginning of my original StartupUri.

I did some searching, what version of Visual Studio are you using? Apparently there may be an bug related to your problem in VS2008:

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

He says a workaround for this bug is to set the x:Name attribute on Application. Hope that helps!

EDIT: I also tried handling the Startup event instead of using the StartupUri and it still worked fine.

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

EDIT PART 2:

Okay, I enclosed the SolidColorBrush inside a ResourceDictionary as such:

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

And the window picks up the brush. The designer doesn't like it, but when I change from StaticResource to DynamicResource it stops complaining.

EDIT 3:

I just thought of something. Do you have VS2010 SP1 installed? It fixed some bugs with the designer.

And sorry, my edit number 2 didn't work as expected. I noticed my blue squiggles were gone in the xaml, but I didn't check the designer. x__x

3
votes

1. Move you App.xaml to your desired location

App.xaml Moved

2. Refactor you App.xaml.cs namespace to accommodate the new change:

Refactor its namespace

3. Rebuild your solution.

[4]. Go to your project properies and set the Startup object to your App.xaml file at the new location.

set the Startup object to your App.xaml

[5]. Run your application and it should work successfully :)