how to open a WPF dialog from a WinForms menu - wpf

I have a WinForms menuitem and I need that on menu click the new WPF dialog is loaded.
How do I do this?
Thanks

You should be able to display it by creating a new instance of the WPF class for the dialog, and then calling its ShowDialog() method.
The only trick is properly setting the owner of the WPF dialog. You can't just set the Owner property directly, since that requires a WPF window. However, you can use the class System.Windows.Interop.WindowInterpHelper to get around this:
MyWpfDialog dialog = new MyWpfDialog();
new System.Windows.Interop.WindowInteropHelper(dialog).Owner = this.Handle;
dialog.ShowDialog();
(I got the code sample from http://blog.stpworks.com/archive/2009/07/02/setting-wpf-dialog-owner-from-within-winforms-application.aspx.)

Related

How can I iterate to the window control from a form

How can I iterate to the window control from a form in the below hiearchy?
Windows.Forms--> WPF UserControl --> WPF Window(Using ShowDialog).
LogicalTreeHelper.GetChildren does not catch the Window object.
A window that is opened by calling Show does not automatically have a relationship with the window that opened it; specifically, the opened window does not know which window opened it. This relationship can be established using the Owner property and managed using the OwnedWindows property. FRom here - Window.Show Method()
But you can't set Owner for your WPFWindow because 'Owner' property can get only WPFWindow but you have as owner WinForms window. Maybe you can just save WindowControl as instance variable in you class so then you can get it any time you want.

WPF MDi With Background Element

How can add Elements inside wpf MDIcontainer section(Like background).
I need this
I would suggest using a DataGrid for your MDI. Bind an ObservableCollection as its ItemSource. Then you can add a new Employee to that Collection. If INotifyPropertyChanged is implemented correctly it will AutoUpdate your Collection and the Content will be shown.
NOTE: Your Employee window has NOT to be shown via .ShowDialog() cause this will freeze the background Window.
This is no problem at all when hitting the save button is closing your employee window.

WPF Open a Modal window from UserControl

I have a MainWindow in my WPF app.
This MainWindow has a menu on the left and when a menu option is selected a UserControl is loaded on the right.
This is similar to Master Pages in asp.net
What I want to do now is to have a modal window show from the UserControl which will only allow the user to interact with the modal window.
I have seen examples of the Main Window showing a modal window (http://www.codeproject.com/Articles/36516/WPF-Modal-Dialog) but not sure on how to load this from a UserControl.
There's this: dialogs and mvvm but this is the best example I've seen of dealing with it: mvvm and closing forms
The first link I've not used and stumbled across while looking for the second link to post that here. The second link has two downloads, you can ignore the _service download, it's basically the same.
One way in WPF is this method
Add a new Window to the project.
Add other controls onto the window as needed.
In XAML name the window such as x:Name="MyWindow"
Put on Dependency properties on the window and have each of the controls bind to the window's data context such as {Binding MyText, ElementName=MyWindow}. (Note I still use, even for WPF these Visual Studio code snippets to add different dependency properties, these save time for a very redundant operations of adding them: Silverlight Snippets.
In the location where you want to launch the model dialog use this example:
Example:
var about = new About(); // Create the new window
// I've added a CompanyName dependency property.
about.CompanyName = "OmegaMan Industries";
about.ShowDialog();

Problem with text input in textbox control

I'm working in a WPF project, which basically is a class library project that implements the MVVM pattern. For clarity purposes I'm gonna say that I just have a single window with a single textbox control on it.
Now, I'm adding this dll to another project, which is a Windows Forms project, and I'm calling the window with the textbox control from this project.
In my Windows Forms project I have a single window with a button on it that calls the WPF window when I click it, and also, before showing the WPF window, it makes the WPF window its child and then shows it.
This is the code that I'm using for calling my WPF window:
MyWPFWindow wpfWin = new MyWPFWindow ();
WindowInteropHelper helper = new WindowInteropHelper(wpfWin);
helper.Owner = this.Handle;
wpfWin.Show();
This code works good and it shows the WPF window, however the problem is that when I try to enter text in the textbox control I can't. The "delete" and "backspace" keys do work, and
the curious thing is that if I use ShowDialog() instead of Show() then everything works just fine, but I can't use ShowDialog() because I need to have access to the parent window.
Can anyone help me figure it out why this is happen.
Thanks!
You need to call ElementHost::EnableModelessKeyboardInterop passing in your WPF window instance. This installs a message filter in the WinForms message loop which forwards all the input to the WPF window when it's active.
So here's what your final code should look like:
MyWPFWindow wpfWin = new MyWPFWindow ();
WindowInteropHelper helper = new WindowInteropHelper(wpfWin);
helper.Owner = this.Handle;
ElementHost.EnableModelessKeyboardInterop(wpfWindow);
wpfWin.Show();

Opening XamWebDialogWindow on button click in silverlight

How do I open a XamWebDialogWindowon button click in silverlight. I am using a MVVM model and capturing button click in Controller
The control you talk about is from the Infragistics suite,
there's a really good link here for the detailed explanation of how the control is used,
but to answer your question
//From the View.cs
XamWebDialogWindow myDialogWindow = new XamWebDialogWindow();
this.LayoutRoot.Children.Add(dialogWindow);
This cannot be done in the ViewModel and should not, i like to set the DataSource of the popup window to the current ViewModel so i only need to deal with one DataSource once the popup occurs
XamWebDialogWindow myDialogWindow = new XamWebDialogWindow();
myDialogWindow.DataSource = this.Resources["DataSource"];
//Where "DataSource" is the x:Name of the DataSource on your parent xaml
If you really want to popup the window from your ViewModel, for whatever reason, there are ways, yes you can

Resources