Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Working WPF Window into a WinForms (VS 2005) Project

Posted on 2011-03-02
6
Medium Priority
?
802 Views
Last Modified: 2013-12-17
I know this is weird and not an ideal approach but stick with me here. :)

So I have a project that I made in VS 2005. In the newest build I want to integrate a WPF window with it, so I designed the window in VS 2008 and compiled it as a library. I then included that lib in the VS 2005 project, along with PresentationCore, PresentationFramework, and WindowsBase. I can call the WPF window from the class library and the code behind the buttons on the window works, but user's can't type in the textboxes.

The controls on the WPF window respond to mouse events. They highlight on mouseover. As mentioned, if a user clicks the button on the window, it runs the code behind it as expected. Clicking on a textbox on the WPF window puts the focus on the textbox and the cursor is displayed, but no text appears to enter the textbox when typing.

Any ideas how to make that work?


EDIT: Another observation -- I can cut/copy from and paste into the textbox. But it still doesn't allow the typing of any characters. When I paste text into the textbox, I can also backspace/delete characters in it. The arrow keys do not allow me to move the cursor forward or backward through any text that I've pasted into the box.
0
Comment
Question by:elorc
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
6 Comments
 
LVL 64

Expert Comment

by:Fernando Soto
ID: 35022086
Does the machine have .Net Framework 3.X on it?
0
 
LVL 1

Author Comment

by:elorc
ID: 35022873
Yes, for now I'm actually just only testing it on the development machine that I have which runs both VS 2005 and VS 2008. I have .NET Framework 3.5 SP1 installed.
0
 
LVL 64

Expert Comment

by:Fernando Soto
ID: 35027793
Hi elorc;

I found this on a Microsoft site


Q: How do I host a WPF control in a Windows Forms application?

A: First add references to the WPF namespaces (PresentationCore, PresentationFramework, UIAutomationProvider, UIAutomationTypes, and WindowsBase). Next create an instance of the ElementHost control and the control you wish to embed in the Windows Forms application and then hook that control up to the ElementHost control. Then simply add the ElementHost control to your Forms control collection:

ElementHost host = new ElementHost();

System.Windows.Controls.ListBox wpfListBox = new System.Windows.Controls.ListBox();

for (int i = 0; i < 10; i++)
{
    wpfListBox.Items.Add("Item " + i.ToString());
}

host.Dock = DockStyle.Fill;
host.Controls.Add(wpfListBox);
this.panel1.Controls.Add(host);

However, if you want to use XAML to describe the WPF control that you want to use in the Windows Forms application, you would need to add an Avalon UserControl item to your project. This will create a UserControl1.xaml file and a UserControl1.xaml.cs file. You can then modify the UserControl1.xaml file to contain whatever XAML you wish to describe your control. Then you would simply create an instance of this control and add it to the ElementHost control as in the above example:

ElementHost host = new ElementHost();
UserControl1 uc1 = new UserControl1();
host.Controls.Add(uc1);
host.Dock = DockStyle.Fill;
this.panel1.Controls.Add(host);

In addition, you will need to modify the project file because the Windows Application does not what to do with the XAML file. You will need to open the project file (.csproj, .vbproj, etc.) in an editor like Notepad and then scroll to the bottom. You will see the following line:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

You will need to copy this line and paste it just below the above line and then change "CSharp" to "WinFX" so that the two lines look like:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

<Import Project="$(MSBuildBinPath)\Microsoft.WinFx.targets" />

Now save this file and reload the project using VS and run the application.

Fernando
0
Veeam Disaster Recovery in Microsoft Azure

Veeam PN for Microsoft Azure is a FREE solution designed to simplify and automate the setup of a DR site in Microsoft Azure using lightweight software-defined networking. It reduces the complexity of VPN deployments and is designed for businesses of ALL sizes.

 
LVL 64

Expert Comment

by:Fernando Soto
ID: 35027809
BTW the reference to that web site is Windows Forms – WPF Interoperability FAQ
0
 
LVL 1

Accepted Solution

by:
elorc earned 0 total points
ID: 35028146
I actually figured this out. I needed to include a reference to WindowsFormsIntegration in the WinForms project. Then, when I loaded the WPF window in the WinForms project, I used this code:

MyWPFWindow x = new MyWPFWindow();
ElementHost.EnableModelessKeyboardInterop(x);
x.Show();

Open in new window


Compiled and ran it, and as Charlie Sheen says, WINNING! :)
0

Featured Post

NFR key for Veeam Backup for Microsoft Office 365

Veeam is happy to provide a free NFR license (for 1 year, up to 10 users). This license allows for the non‑production use of Veeam Backup for Microsoft Office 365 in your home lab without any feature limitations.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In my previous two articles we discussed Binary Serialization (http://www.experts-exchange.com/A_4362.html) and XML Serialization (http://www.experts-exchange.com/A_4425.html). In this article we will try to know more about SOAP (Simple Object Acces…
The article shows the basic steps of integrating an HTML theme template into an ASP.NET MVC project
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…
In this video, Percona Solution Engineer Dimitri Vanoverbeke discusses why you want to use at least three nodes in a database cluster. To discuss how Percona Consulting can help with your design and architecture needs for your database and infras…

670 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question