21

I've got a project that contains usercontrols. For some reason, the design view for the window which uses the said controls has stopped functioning and insists on "Invalid Markup" - the error given is that some members of the usercontrols are not recognized or not accessible. The project however compiles and executes just fine. Loading it up in VS2010, the editor works fine, no errors whatsoever - the same even in Expression Blend.

So far I have tried the typical clean, rebuild, manually deleting stuff from obj, updating the .xaml and rebuilding, tried starting VS2012 with /resetuserdata and /resetsettings - the problem persists. I even rolled back to a much older revision of my project, back when the designer was working just fine, no dice - same error. I also tried launching VS2012 as a new windows user to avoid any stored appdata that might be lingering, again a no go.

Is there some other sort of cache or something that I could manually delete?

Dave Clemmer
  • 3,757
  • 12
  • 47
  • 72
moreyummystuff
  • 231
  • 1
  • 2
  • 5
  • Do you recently update silverlight. In control panel check all versions are the same for Silverlight,Silverlight Developer, Silverlight Toolkit.With SL5 there are incompatibility problems occurs. Hope helps! – Davut Gürbüz Oct 13 '12 at 08:57
  • No I haven't had any silverlight-related changes occurring. I've traced it down to custom properties in usercontrols - something with them confuses the designer in VS2012, but I can't figure out what so far. – moreyummystuff Oct 13 '12 at 09:32
  • Ohh sorry I didn't notice VS2012.I have no idea. – Davut Gürbüz Oct 13 '12 at 15:53
  • You ever figure this out? I'm having the same issue! – JMK Jan 16 '13 at 11:21

11 Answers11

20

There's also an issue with the ShadowCache (used for rendering designer) getting out of sync with your XAML in VS2012. I just found this out, as I was having a horrible time with the following error with derived user controls:

The local property XXXX can only be applied to types that are derived from YYYYY.

The shadow cache is located in your user profile directory:

app data\Local\Microsoft\VisualStudio\11.0\Designer\ShadowCache

You can delete everything in there and restart VS2012. After that, things worked much better (for at least a while!)

dansan
  • 455
  • 5
  • 16
  • I've had the same issue where the designer would insist that my DataTemplate resources were invalid xaml in a Windows Phone page. I tried everything, but clearing the ShadowCache finally did the trick. This is going to save me so much time and frustration. Thank you so much! Not sure if this has any side effects, but it would be great if you could tell Visual Studio to clear the ShadowCache when it shuts down. – Bas Jan 14 '14 at 08:42
  • 2
    For people directly scrolling to the highest voted answer, see Gooey Developer's answer below. Changing the target platform from **x64** to **Any CPU** worked for me. – dotNET Oct 28 '16 at 07:18
10

Delete everything in ShadowCache

C:\Users\username\AppData\Local\Microsoft\VisualStudio\11.0\Designer\ShadowCache\

Copy-pasteable paths

Just copy/paste one of these paths into Windows Explorer. %LOCALAPPDATA% is a Windows Environment Variable it will be replaced with the corresponding value when entered into Explorer (also works in Command Prompt)

VS2012

%LOCALAPPDATA%\Microsoft\VisualStudio\11.0\Designer\ShadowCache\

VS2013

%LOCALAPPDATA%\Microsoft\VisualStudio\12.0\Designer\ShadowCache\

VS2015

%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\Designer\ShadowCache\

ASP.NET

If you develop ASP.NET also delete

%LOCALAPPDATA%\Microsoft\WebsiteCache

%LOCALAPPDATA%\Temp\VWDWebCache

Community
  • 1
  • 1
pr0gg3r
  • 3,904
  • 1
  • 33
  • 25
  • "Better way to open that folder"... where do you specify that path. Your answers left me more confused than enlightened. – C Johnson Dec 18 '14 at 16:42
  • 5
    Really?!... Press Windows key plus E to open the computer folder (formerly known as My Computer). Click into the navigation bar and paste that uri there. %LOCALAPPDATA% will be replaced by the right folder names - username, operating system and operation language will be automatic taken into account. – pr0gg3r Dec 19 '14 at 13:41
4

I'm not sure this will fix all cases but this is what worked for me (all the time now).

I have VS2012, using the Blend designer in the IDE, building an x64 application, when I would define a new ICommand and add the Command attribute, I would get the designer isn't supported in x64 error (I forget the exact warning). If I switch to x86, I'd get invalid XAML markup errors complaining the the ICommand wasn't recognized or was not accessible, no matter how many times I rebuilt in x64. If I switch to x86, build, then switch back to x64, voila, not problems with the designer.

Now I recall similar issues with VS2008 and Blend version 3 and 4. From what I've read in other posts, using Any CPU might also resolve the issue.

  • 1
    In VS 2013 Express, I see the error "The Design view cannot display correctly because some custom elements have not yet been built." and errors related to ObjectDataProvider XAML elements necessary to bind enum types to combo boxes or list boxes, when the target is X64. Switching to "Any CPU" allows the designer to work. Then I switch back to X64 and Build works without a designer error. – H2ONaCl Nov 24 '14 at 18:15
1

May be you have added user controls which are not supported or you might have added some wrong parent-child relationship in your user controls . Try removing the suspected User Controls and rebuilding the project . It must fix the issue . Cheers

SinhaOjas
  • 134
  • 7
1

I've the same problem while using controls with a custom (no param) Constructor.

Check if the Custom/User Control constructor doesn't require any data that the WPF designer doesn't have. A quick wait to check that is surrounding the whole thing with a try catch, cleaning, rebuilding and then check to see if the problem is solver.

If it is not, try commenting everything except the default WPF Init cod, clean, rebuild and test it out.

H Rangel
  • 54
  • 4
1

In Visual Studio 2013 this is a workaround I using for my Windows Phone Project, http://danielhindrikes.se/visual-studio/workaround-for-invalid-markup-problems-when-developing-for-windows-phone/. I guess it is the same designer that is used when you writing XAML for WPF.

Have tried to delete Shadow Cache but itjust work first time I start Visual Studio, above workaround is the only thing that helped me.

Daniel
  • 1,501
  • 1
  • 13
  • 16
1

A little late, but something else to consider: If your no-parameter constructor is doing some other work, like getting data that doesn't exist because you are in the designer, add this at the start of your constructor:

if (DesignerProperties.GetIsInDesignMode(new System.Windows.DependencyObject())) return;
// Do work.

This is necessary because the designer does execute your no-parameter constructor which may fail in design mode an give you the invalid markup.

And, regardless of what others are saying, this is not a VS or WPF XAML Parser bug. I ran into this issue today using VS 2015, .Net 4.5.2.

Bob
  • 11
  • 2
0

I just had the same problem (program compiling and running fine, XAML designer reporting invalid markup), the issue was that I had accidentally changed the assembly name of one of the projects in my solution, I changed it back and my XAML designer sprang back to life, so check the Properties page of each project in your solution, and ensure the Assembly Name is as you expect it to be.

JMK
  • 24,985
  • 50
  • 147
  • 268
0

You need to re:encode your xaml, open bugged files in ide -> save as -> save encoded (choose UTF8)

Enhakiel
  • 306
  • 2
  • 10
0

I think there is no problem in your project, but it is problem in VS 2012. Try to install the latest update for VS 2012 (Update 2) and also check this answer.

Regards,

Community
  • 1
  • 1
Miro Malek
  • 269
  • 2
  • 7
0

I have the same Problem with VS 2015 and 2017 but only if I compile for x64 only. Here it helps if I change compile target (Project properties - Build, its called Plattformziel in german) temporarily to x86, compile to project and switch back to x64.

Maybe this is a "solution" for anybody else.