In my Visual Studio 2015 WPF Project I want to define a new Resource for my UIElement. In the Documentation on the Microsoft Site (https://msdn.microsoft.com/en-us/library/hh921076.aspx) they say that you can choose a ResourceDictionary.
Following Steps are described:
Click the UIElement
On any Property click on the Little square on the right
Select "Convert to new Resource"
Choose your Option
In my Project the desired Option is not enabled. The only Option i can set is the "This Document" Option.
My Project has the following Structure.
Folder "Resources" which contains some XAML Files that hold single ResourceDictionaries
a ModuleResources.xaml file that merges all the Resource Dictionaries from the Resources Folder together
In the Project Properties i found a Option to define Resources, but those only allow Images/Strins/Icons.
Am i missing something?
Thanks for your help.
EDIT:
Related
This seems like it should be pretty simple but I can't seem to make it happen. Lets say I have an existing project with a user control named uc1. I would like to use this user control in another project. I right-click the project name in the solution explorer and select add>existing item, change the drop down to all files and select the files uc1.xaml and uc1.xaml.vb. This of course adds the files to the project but there is no correlation between the xaml and the code behind file and there is no way to use the control. What is the proper way of doing this?
Reed's answer is a good architectural one. If you plan on creating a control that you will reuse in many projects then it's best to use a control library.
Your original question is valid in some situations though. Say you have some source code from the Internet that you've unzipped to your drive. This project contains a .XAML file and its linked .vb file that you want to add to a project.
As you seen, the Visual Studio Solution Explorer doesn't link the files when adding with the "Add Item" dialog. I think this is a bug. I find that if I reload the project, the affiliation is added.
Here's a workaround I use. I drag the files from Windows Explorer /File Explorer onto the project in Solution Explorer. That works correctly the first time.
This of course adds the files to the project but there is no correlation between the xaml and the code behind file and there is no way to use the control. What is the proper way of doing this?
Normally, you'd add a reference to the other project, and use the UserControl directly.
This allows you to build a single project with your UserControl, and use the resulting assembly (DLL) in multiple projects without duplicating the code.
If you want to reuse your user controls you need to create a new project and choose "Class Library" from the list of available projects. When compiled this class library can easily be used by any number of other projects and solutions simply by adding a reference to compiled DLL created when you build this class library.
Edit: As mentioned in other answer it's "WPF UserControl Library", not simple "Class Library"...
You just need to add the .xaml file and VS should auto add the code behind(nested). I've seen this not work a few times and as #Walt Ritscher said this is probably a bug.
I found simply restarting Visual Studio and reloading my solution worked.
Re: Visual Studio 2010 Silverlight 4.0 project.
When setting the source for an image element using the builder from the property sheet, it Visual Studio has a handy option to add an image file to the project and set it as the source for the control.
The Problem:
Visual Studio wants to put those images in a folder called images off the root of my project, and will even create that folder if it doesn't exist. However, my project is structured so that the images should go in a different directory (assets\images). So I am always having to move them after using that builder.
The Question:
Is there a way to configure the project or change the default in Visual Studio such that the builder puts newly imported images in a different directory?
I don't think we can configure that. The best workaround for you would be to put a create a folder with all the images and add it to the project. From the Source property for Image control in the Properties window, you will able to select images from the "Choose image" dialog box.
I have a class library that I created using the "Class Library" project template. If I right-click on this library in Solution Explorer and select "Add > User Control", Visual Studio adds a WinForms UserControl. That's not what I want -- I want "Add > User Control" to add a WPF user control.
I've already added references to the WPF assemblies (WindowsBase, PresentationFramework, and PresentationCore), and I already have some WPF UserControls in this library, and everything compiles. My library does not have references to the WinForms assemblies (System.Drawing and System.Windows.Forms). But apparently the proper references are not enough of a clue for Visual Studio, because when I try Add > User Control, it adds the WinForms references to my project, and then creates a WinForms UserControl.
I can add a WPF User Control to my WPF Application project, and then move it into my library. But that's a pain, and I'd rather have it work properly in the first place.
I think I'm probably missing some kind of arcane XML element in my .csproj file that tells Visual Studio which designer to use by default, and if I add the right XML element with the right cryptic GUID, it will start working properly. If I could create a new WPF Control Library, I could probably compare the two project files and figure this out. However, I'm using Visual C# Express, which doesn't have a template for a WPF Control Library project, so I'm out of luck there.
What do I need to do to my Class Library's .csproj file so that VS2010's Add > New User Control will add a WPF UserControl?
There are sub-projects class ids in the project file that affect the Visual Studio context menus and how the project behaves in general. The easiest thing to do is to recreate the project as a:
WPF User Control Library
instead of a "Class Library". It is possible if you already created the project to edit in the sub-project class ids by hand by opening the ".csproj" file in a text editor such as Visual Studio itself but its easy to cause more damage than you fix that way.
I believe but haven't test that another type of library will also work:
WPF Custom Control Library
which is intended to hold other types of controls than UserControl objects but being a WPF sub-project type the context menus also work correctly for the use case you are describing.
Edit:
For completeness, I've just tested how to manually add the sub-project GUIDS. Add this line to the first PropertyGroup in the .csproj file:
<PropertyGroup>
...
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
</PropertyGroup>
Not tested with Visual Studio Express.
Is there a reason why Visual Studio won't let me create a WPF window in a DLL project?
I "solved" it by creating a window in an Application Project and copying it to my DLL project.
I also found that I could just create a UserControl and change the base class to "Window".
But if I had to do it this way, it's maybe because I shouldn't do it...
Make sure the project type is WPF User Control Library when you create your project.
If it isn't then no sweat, just edit the csproj file and make sure the <ProjectTypeGuids> element under Project/PropertyGroup contain the following GUIDs
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
Also, make sure you reference PresentationFramework and System.Xaml in your project, or you will not get any WPF in your code.
You can try adding new WPF User Control Item and change that to Window.
Add New Item->WPF->User Control
In XAML:
Change <UserControl> tag as <Window>
In CS:
Change base class from System.Windows.Controls.UserControl to System.Windows.Window.
I do it this way:
1) create "WPF Application"
2) remove App.xaml
3) change Project properties -> Application Output type: to Class Library (originally there is Windows Application)
Otherwise you will get errors:
"Library project file cannot specify ApplicationDefinition element"
"The project file contains a property value that is not valid"
What do you mean that Visual Studio won't let you create a WPF window in a DLL project? Do you mean that if you right click the project, there is no option to add a Window there?
If that is the case, I think that means that you created a project type that isn't a WPF project type. I encountered something similar a while back when I wanted to upgrade a WinForms project to use WPF instead - see this question for more information.
I've created a control in blend (xaml and code behind), saved it, and rebuilt the entire project. Now, not only does this new control not appear in the Assets tab in blend, none of the other user controls i've created appear either. I've rebuilt several times, blown away the obj and bin directories and rebuilt again, to no avail. How do I get my user controls to appear in the Assets pane so I can use them in my project?
thanks
Blend: 3.0.1927.0
VS: 9.0.30729.4108 QFE
.NET: 3.5 SP1
Sweeney,
I don't have the specifics of your install environment or applications installed, but using what I have, I can create a custom user control in blend and compile, pull it from my assets library, and put it on my page. Here are my specs, maybe you can check to see if you're running a different version or such:
Microsoft Expression Blend 2 Service Pack 1 - Version 2.1.1760.0
Microsoft Visual Studio 2008 - Version 9.0.30729.1 SP
Microsoft .NET Framework - Version 3.5 SP1
Here is what I did to create my custom control:
Open Blend.
Create new project (File > New Project..., Then named my Silverlight 2 Application, and clicked OK.)
Create new UserControl (File > New Item..., Then named my UserControl, and clicked OK.)
Create something like a colored background and text so that the control can be seen.
Build the application.
Add my custom control to the Page.xaml file from the Asset Library. (This may be where you got tripped up, please see below).
Size my new control.
Final product:
Screen Shot http://img163.imageshack.us/img163/7554/finalproduct.jpg
Accessing Custom Controls in Asset Library
Click the Asset Library icon (left side by default): Asset Library http://img43.imageshack.us/img43/2198/assetlibrary.jpg
Click the Custom Controls tab (top of Asset Library window): Custom Controls http://img5.imageshack.us/img5/8915/clickcustomcontrols.jpg
Select your custom control: Custom Control http://img693.imageshack.us/img693/1684/customcontrol.jpg
Place them on your page to your hearts content.
I hope this helps you,
Thanks!