Wpf get current window

By using our site, you acknowledge that you have read and understand our Cookie PolicyPrivacy Policyand our Terms of Service.

Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It only takes a minute to sign up. Sometimes when developing a WPF application, I need to access a certain Window View from the corresponding ViewModelto perform or fire a method like this for example:.

So I decided to make a solution, a helper class, in which, using a method, I give the ViewModel and I get back the corresponding View, using the DataContext of the View, the solution looks like this:. Use an event Aggregator where publish the message from the viewmodel and subscribe from view.

I create a Boolean property in my viewmodel and bind this property to the view like this: Put this in the content of your element. If you want it to be animated you can set the datatrigger. Also don't forget to put RaisePropertyChanged 'NameProperty' in the setter of your property else it won't be triggered when the property is changed at runtime. Sign up to join this community.

The best answers are voted up and rise to the top.

wpf get current window

Home Questions Tags Users Unanswered. Asked 5 years, 8 months ago. Active 4 years, 4 months ago. Viewed 23k times. Equals viewModel select window.

Save and Restore WPF Window Size, Position, and/or State

GetCorresponingWindow this. AymenDaoudi AymenDaoudi 1 1 gold badge 1 1 silver badge 6 6 bronze badges. Active Oldest Votes. Publish output ; b. Paritosh Paritosh 2, 13 13 silver badges 26 26 bronze badges. Brandon Pille Brandon Pille 11 1 1 bronze badge. Sign up or log in Sign up using Google. Sign up using Facebook. Sign up using Email and Password. Post as a guest Name. Email Required, but never shown.

The Overflow Blog.This site uses cookies for analytics, personalized content and ads. By continuing to browse this site, you agree to this use. Learn more. Office Office Exchange Server. Not an IT pro? We are retiring the TechNet Gallery. Make sure to back up your code. Script Center. Sign in. United States English.

Scripting Techniques. Get the position of a window. Try Out the Latest Microsoft Technology. My contributions. Get the position of a window This function utilizes platform invoke pinvoke to provide the X,Y coordinates of a window on the screen as well as its size in height and width.

More information about this function can be found in the following Hey, Scripting Guy! Downloaded 13, times. Favorites Add to favorites. Category Scripting Techniques. Sub category Running Scripts. License MIT. Share it:. This script is tested on these platforms by the author.

It is likely to work on other platforms as well. If you try it and find that it works on another platform, please add a note to the script discussion to let others know. To provide feedback or report bugs in sample scripts, please start a new discussion on the Discussions tab for this script.

Disclaimer The sample scripts are not supported under any Microsoft standard support program or service. The sample scripts are provided AS IS without warranty of any kind.

wpf get current window

Microsoft further disclaims all implied warranties including, without limitation, any implied warranties of merchantability or of fitness for a particular purpose. The entire risk arising out of the use or performance of the sample scripts and documentation remains with you. In no event shall Microsoft, its authors, or anyone else involved in the creation, production, or delivery of the scripts be liable for any damages whatsoever including, without limitation, damages for loss of business profits, business interruption, loss of business information, or other pecuniary loss arising out of the use of or inability to use the sample scripts or documentation, even if Microsoft has been advised of the possibility of such damages.If you have a Multi Monitor setup in Windows and you want to open a WPF window in fullscreen in a specific monitor you have no native optionbut it is quite simple to obtain such functionality.

open new form, close existing wpf form c#

First of all you need to reference Winform assembly, because you need winform code to identify information for screens setup in the current system. In my requirements I need to store the position of every view at the time of last usage, so I can restore its position when the user will open it a second time and I need to support fullscreen and multi-monitor setup.

I decided to save the name of the screen of each View in a dictionary as well as windows coordinates and a boolean that tells me if its maximized. The code to detect this kind of information is really simple, if the window is not maximized I need only to store Top, Left, Height and Width property, if it is maximized I need to find the name of the monitor where the windows is maximized into. All windows create a Position object on OnClosed method and that information is stored in application settings.

Whenever a view is opened, if a previous Position object is present you can restore the position of the form with simple code, first of all identify the name of the screen where the form was at the time of closing. If the form was closed when it is not in full screen the code to restore the position is really trivialbecause I need only to restore the four positioning properties.

This code fully supports multi monitor, because even if you have more than one monitor configured, you have only one coordinate system, as an example if you have a monitor to the left of your primary monitor, the Left position of the windows will be negative.

This lead to the fact that to support multi monitor setup you needs only to save and restore the standard four positioning properties. ViewBase is a base class that every Window inherit from; this code is not MVVM like, but when it is time to handle positioning and other windows properties, using a base class is a simpler alternative that doing all this logic in a Base View Model and position the windows with Binding.

If the form was closed while it was in full screen to restore it in the original screen you need a slightly different code, because simply restoring coordinates is clearly not enough. This code works because when a window is maximized the system maximize it automatically in the screen where it is placed.

This code is one of the primary reason why a full MVVM approach does not works well. This code should be run when the windows is fully initialized and after some tentative, I found that the safest solution is to be able to handle windows events like OnInitialized instead of relaying only on binding and MVVM when it is time to manage window positioning and full screen restore.

All this logic is inside a base class and all I need to do is inherit all View from this class called ViewBase, instead of using standard Window class and all the rest is automatic. I think the only thing you need to do is to strore height width left and top in every case and just in case the monitor is maximized maximize it in the onload event.

That will do the trick because the left and top properties remain the ones before the maximization. Width; this. Height; this. Top; this. Moreover, with really different resolution monitor, I had little problem when I restore the original size stored when the windows is maximized and setting the status to Maximized.But how do I get the size of the current screen? Multi-Screen users do not always use the primary screen and not all screens are using the same resolution, right?

Get all Windows in a WPF Application

As far as I know there is no native WPF function to get dimensions of the current monitor. Instead you could PInvoke native multiple display monitors functionswrap them in managed class and expose all properties you need to consume them from XAML.

If you are familiar with using System. Forms class then you can just add a reference of System. Forms class to your project:. Now you can add using System. Forms; statement and use screen in your wpf project just like before. This will give you the current screen based on the top left of the window just call this.

CurrentScreen to get info on the current screen. How to get the size of the current screen in WPF? PrimaryScreenWidth; System. PrimaryScreenHeight; But how do I get the size of the current screen?

Here budy. This will give you only the width and height of the workarea System. Width System. It works with this. VirtualScreenWidth; this.

VirtualScreenHeight; Tested on 2 monitors. Windows; using System. Forms; namespace Common. FromPoint new System. Point int window. Left, int window. Why not just use this?

FromHandle interopHelper. Handle. How do I get the path of the assembly the code is in? How do I enumerate an enum in C? How do I get a consistent byte representation of strings in C without manually specifying an encoding?When building applications that mix WPF and Winforms windows e.

It is very simple to just add this interface to an existing WPF Window and implementing the single property:. It does not look as a very good solution to add such an interface to each and every Window in you whole application only to be able to be the parent of a dialog.

So instead of implementing the interface directly you could build a wrapper class that implements this interface and use this wrapper when opening a dialog:. I like the wrapper solution more than implementing an interface to each and every window but I do not like the changed ShowDialog call. It just does not look natural any more. To solve this I created an extension Method to be used with the wrapper class:. This entry was posted in. Bookmark the permalink.

What about the other way around? The ShowDialog method only takes a System. Window object as parameter.

Get Current Application Instance in WPF and C#

Name required. Mail will not be published required. Design Studio. Icons used here are from Web 2 Mini pack.

wpf get current window

To download more WordPress Themesplease visit www. Ticklish Techs a mostly. NET but also some other cool techs blog. Dec ShowDialog new Wpf32Window this ; The grand solution to this problem I like the wrapper solution more than implementing an interface to each and every window but I do not like the changed ShowDialog call.

ShowDialog this. I tried Christen Pihl : A lot of thanks for all your work on this blog. My mum reall Garage : Thanks a lot! It worked for me on a ThinkPad EFor this, attach the CurrentWindowService service to your View window. You can do this in the following ways:. Behaviors collection or set Interaction. BehaviorsTemplate as follows:. You can attach the CurrentWindowService to any object within a window, like in the code sample above.

In the code sample below, the CurrentWindowService is attached to the main window. The ICurrentWindowService interface provides a set of members useful to manipulate for example, close or hide it the current window in code.

SetWindowState WindowState. The code sample below shows how to access the service from a ViewModel that is a DevExpress. ViewModelBase descendant and how to close the current window from code. If you want to perform certain actions at the ViewModel level when the parent window is closed or prevent a window from being closed, bind the CurrentWindowService's ClosingCommand property to a corresponding command in your ViewModel.

The page you are viewing does not exist in version This link will take you to the root page. All docs. General Information. NET Subscription Overview. Common Tools Project Converter. Assembly Deployment Tool. Localization Service. Quality Assurance and Productivity. CodeRush Classic. TestCafe Studio. Controls WinForms.

UWP Windows The post shows how to position Wpf window on secondary monitor or show two windows on two monitors.

wpf get current window

The post contains complete code and we discuss how to address several scenarios. Full code is accessible on GitHub Blog repository. Solution uses C 6. Net 4. FormsSystem. DrawingNuGet packages Unity and Ikc5. Solution contains one Wpf application project.

SystemParameters provides physical resolution of the primary screen, but according to Wpf architecture, position of elements should not rely on physical dimensions of the display. Screen class from System. Forms library provides useful property Screen[] AllScreens. It allows enumerate all screen and reads their working area.

As windows are created manually, StartupUri should be removed from App. Method OnStartup executes the following code:. In order to show window on expected screen, it should has the following properties:.

Background color is used to colorized window and distinct them at different screens. ViewHeight and ViewWidth are bound to attached properties in order to obtain view size in view model code is taken from Pushing read-only GUI properties back into ViewModel. ScreenRectangle class looks like derived class from Tuple that implements NotifyPropertyChanged interface:. The sample application was updated. Now it shows more system parameters and some sizes and dimensions are commented.


thoughts on “Wpf get current window

Leave a Reply

Your email address will not be published. Required fields are marked *