I am trying to build a MDI UI in WPF.
I have tried MdiContainer and WPFMDI but I have an issue in both cases. If I have a usercontrol with validation showing red borders, and another user control is shown on top of it, the red border from behind is shown.
I have shown the behavior at https://wpfmdi.codeplex.com/workitem/13413 and https://mdicontainer.codeplex.com/discussions/644330
Since the same issue happen in both library, is there something WPF-related?
Any idea on how to fix it?
Since it seems a complex task, any ideas on how to build MDI UI using WPF that would work with validation?
I finally found the issue and it is not related to the WPFMDI component I am using.
The solution is to wrap your StackPanel or Grid containing the controls being validated into an AdornerDecorator.
The solution was found at https://www.devexpress.com/Support/Center/Question/Details/B195328
Related
I have a wpf app,which used winform control on the mainwindow.Of course ,this winform control stays ontop when a show a modal border. After that,I found Microsoft.DwayneNeed way to solve this problem.It works. But there's a new problem shows up. Let me describle my situation:
In the MainWindow,I have a Grid,which has three columns.The control in first column is a normal wpf control.The second column contains a Gridsplitter.And the third columns is where the winform control lays in.
Before I use AirspaceDecorator(From Microsoft.DwayneNeed) as container of winform control,except the winform control always stays on topmost,every thing is ok, and GridSplitter works well.
After I use AirspaceDecorator as winform control's container, winform control doesn't stay topmost.It's good,it's what I want. But surprisingly, GridSplitter doesn't work any more:
1.Generayly,I can't drag GridSplitter --- it should be drag horizontally as designed.
2.On occassionly,GridSplitter will be dragged to the end of the left or the right edge of window .At this curcirmstance,the winform control occpies all the window,or zero.
I tried some ways,such as AirspaceFixer,using WinformHost to host dialoge border,etc. But none of these methods works.
Thanks !
After some testing,I resolved this problem.The answer is to use AirspaceFixer correctly.
Before you call something show on winform control that wrapped by AirspaceFixer,you should set FixAirspace to true,and after you hide upper wpf control,you should set FixAreaSpace property to false. Just like it's demos shows up.
I currently have an application that uses a ToggleButton/Popup feature and it all works as expected, but I wanted to see if there's a way (either through control templates or custom controls) that allows the toggle button to be included as part of the popup window.
The effect I'm going for is similar to the standard TabControl/TabItem layout but instead the ToggleButton would replace the header of the TabItem and the Popup would serve as it's content.
In the end, I want to have the Popup window display to the immediate right side of the ToggleButton and have one continuous border that wraps around the outside edges of the ToggleButton and the outside edges of the Popup window with no border inbetween. The final appearance would show no separation between the two controls, and the user would perceive the ToggleButton and the Popup as a single control object.
I was thinking it might be possible to edit a template of a standard TabItem and have it's content property display as a popup, but haven't tried it yet.
Let me know if you think this is the way to go or if there's any other potential solutions. Thanks.
Almost everything in WPF can be done in multiple ways. The same is true with your goal.
If you plan on reusing this control in multiple places, I would suggest building it as a custom control. I build custom controls and UI libraries for a living, so I am a bit biased.
I would build a custom control that inherits from HeaderedContentControl. The Header property is the content of your ToggleButton, and the Content property would be the content of your Popup. Since you own the ControlTemplate and code, you can make it look and function exactly how you need it to with no compromises.
Hi guys I have a problem
i need the info I enter in a text box on my main window to update a label on my second window called script.
The text box name is client and the label name is client-label
I have tried many different ways to do this and still not coming right
how can I do this?
PS. I am new to the programming world so please give me step by step instructions anywhere possible :)
Pertinent to your requirement (i.e. two WPF windows with sync controls), it will require quite a bit of coding. Better (simpler) way is to create a pseudo-window, i.e. just a nested layout Grid within you main window containing all controls pertinent to that second window (you can set its visibility to collapse/visible in order to "simulate" pop-up window), and update a second TextBlockon .TextChanged event of the first TextBox (using code behind). Alternatively, you can apply data binding technique is XAML of the same single window.
Note: you can implement a splitter control to resize two 'sub-windows'.
In case you do prefer to implement second window, then refer to this example: Data Binding between two TexBoxes in different windows
Rgds,
The "correct" way for this would probably be to have a view model for each view part in your gui and have them communicate through events.
The Prism framework for WPF will help you with most of the plumbing for this.
Se more about Prism here: http://compositewpf.codeplex.com
I have programmed c# application i will post screenshot. In this main form is 3 buttons which opens different forms. Now i decided to modify this application I want to Make one main form with strip menu which will open this forms. I used this code but i don't like or i'm doing something wrong. I don't like because there is child controls(minimize, maximize, close) in parent (please see second picture ):
Please advice me something. Is MDI good for such job? Thanks!
Sell sell = new Sell();
sell.MdiParent = this;
sell.Dock = DockStyle.Fill;
sell.Show();`
So my problem is that parent form is not filling when i open child form this is creen how to make that it parent form was filled with child form
Seeing your latest edit, I assume the reason that your child form's content doesn't fill the screen even when it's maximized is because your content/layout is not flexible.
Wherever you've placed the controls during Design Mode is where they're going to end up at run time, regardless of how big or small you make the window. If the window is too small to contain all of them, they'll either be covered up or you will see scrollbars. Alternatively, if the window is made larger than necessary, you'll see a lot of empty space.
The way around this is either to set the Dock and Anchor properties of your controls, which causes them to expand and compress to fit the layout of their containing form. You could also place your controls inside a TableLayoutPanel or FlowLayoutPanel control to help manage their layout.
As far as the question you appeared to be asking originally, I still can't tell if you're opposed to the way an MDI application looks, or if you simply don't understand how to correctly implement it. The clarification comment you offered actually makes things less clear to me—you posted a code snippet, but didn't explain what it means. As I wrote in a comment, there's no (non-hackish) way to show a form that doesn't have minimize, maximize, and close buttons (setting the FormBorderStyle property to "None" does this, but I think this is a silly solution that simply allows you to use the wrong control for the job—it won't behave like a form, the user won't be able to move it around like a form, etc. so why use a form?).
If you truly want to have a single application window with changing content in the center, you should create a series of UserControls. You can lay out each user control with the necessary child controls, just like you would with a form (using the fluid layout techniques I discussed above), add each user control to your main form, set each control's Dock property to "Fill" (so that they fill the entire viewing area), and then write code to simply swap out the currently visible user control in your main form's viewing area. The advantage of using a UserControl versus something like a Panel is that you consolidate all of your code into a single control, much like you would with a Form. You could use a tab control, but if you don't want to show any indication that there are multiple forms (which is what your aim appears to be), this would also be the wrong control for the job.
If you literally want to open child forms inside your main form, as your question title indicates, you should indeed be using MDI. If you don't understand how to do this, you'll need to clarify your question further.
Set MDI Container property to true for your parent form. It will help.
Set
FormBorderStyle = None
for your child forms
I am attempting to create my own custom Autocomplete style dropdown control in c# .net2.0. For speed of development I have built my control as a UserControl but have hit on an issue of doing it this way.
When the custom drawn dropdown gets drawn I have to resize the UserControl area to be able to display the list of options.
Ideally I want to be able to mimic the drodpown list behaviour in that the list of options is drawn 'floating' and is not constrained by the UserControls height and width (nor even the parent forms boundaries). A tooltip is another example of the unconstrained 'floating' that I desire.
The only way I can think of achieving this is to create on the fly a new form with no border or title bar and display this when the popup is required.
Is there a better (but also quick) way of doing this?
TIA
You would need to use a Form or NativeWindow to allow the control to float correctly. To make a form follow the control is easy enough but it is more difficult to implement and handle all of the focusing/hiding issues especially if you need seamless tabbing/key navigation.
You can try creating a control that is based off the ToolStrip Drop Down Button control. I believe that this control has the functionality that you are looking for. I found this reference for creating controls based off the ToolStrip, you might try starting with this.
http://blogs.msdn.com/jfoscoding/attachment/1335869.ashx