How do I make draggable controls in WPF? - c#

I am trying to find a way to create custom controls which lets the user drag them around on screen. This illustration shows roughly what I'm after:
So, this is basically a node network, where each node can have an arbitrary number of children and exactly one parent node. The connections between the nodes also has to follow them when they move, and bend appropriatly. I would also like all nodes to move when dragging the "canvas" behind them.
I know this is a lot of information, but basically I'm wondering if this is possible (and not too difficult) to achieve with WPF, and if it breaks with the philosophy of WPF to use it in this way. Is there a better way than using WPF for this? I've done a lot of research and can't find much info doing these things with it. Also, what is the most common ways to do this in Windows applications using .NET and C# if this seems way off?

Related

Best way to have custom listview in winforms c#

Well I am confused, because didnt find good way to have something like RecyclerView in winforms.
I want to do something like this:
Its pretty easy to make it in Android but now I need same thing in Winforms for Desktop.
What I want to see:
ListView with Panel inside. Panel contains image and multiple labels with different sizes.
What I tried:
1) ObjectListView
Not so bad. Its smooth. But I cannot make it customize it fully. I can place simple controls inside it, but cant make multiple labels one below other.
2) FlowLayoutPanel and just place dynamically panels inside.
With this option I can do everything I want but after adding ~20-30 panels its not smooth anymore. Also I spend too much time for implementing "lazy loading" for it and there are really big problems with making it smooth.
So the question is: can you recommend me better solution than I tried already?
May be its some library or another way of using system resources.

Adding grids in XAML

I am designing a graphical application in WPF and net 4.5. I want to use the MVVM pattern and to not break it I would like to use as less code behind as possible.
The application should start with a window that contains a line graph, that is easy enough :)
When the user chooses so he can add another line graph, or a data pane. And that indefinitely, as shown in the picture below.
The user should be able to resize these windows. There will also be some sort of scrolling in the graph panes and all the line graphs there should scroll together.
I was thinking to use a grid for this. I would be able to accomplish this hard coded, but I am wondering if it is possible to do this solely relying on XAML.
Thanks

Breaking up an all C# WPF application into XAML for one of its UI controls and C#

This is a broad question, I am aware. However, I have been trying to make a modification in a C# source code to enable a ToolboxControl UI control's right hand border to respond to a mouse drag. In other words make the control size bigger by grabbing the right hand boarder and dragging it to the right. I Have not been successful. So I am thinking if I incorporate a XAML file and create the ToolboxControl in XAML, maybe I would have more control in manipulating the ToolBoxControl.
I dont know how to break up a pure C# WPF code into C# and XAML.
In a nutshell, The problem I am dealing currently is that there is already C# code developed by other developers to perform certain function. I am using the existing C# code but I believe if I move some of the UI functionality from the C# into a XAML file, I would have a better handle on adding some of the needed UI features to the original program.
So you see my problem is I am not starting from scratch. I need to use an existing C# code and break away some UI functionality of it nd put it in a new xaml file. Do you have any ideas about any place that that has been done?
I am looking for any repsonse that leads me to a conversation thread or a sample. In other words I dont know where to start from. any useful guidance is apprecaited and would be marked as an answer.
Check out this article.
At its simplest, you will need to add an invisible (or not) drag handle to the right hand border of your control, then adjust the control size during the drag events raised by that drag handle.
Here is another article showing a similar concept expanded to an entire diagramming system, which includes the resize behavior you mentioned.
You may be able to define a style for what you are trying to accomplish. I wouldn't worry too much about breaking apart the C# from the XAML as that is a nice to have but not nec

How to accomplish different states of view in WPF Apps

I have an idea for a personal project. And I know one way of accomplishing it in Windows Forms (which I no longer wish to use). Basically I could (in WinForms) just draw everything onto the screen (Form) and then when I need to switch views/states of the application, just redraw the new stuff in the old stuff's place.
But how can we have different states in WPF? Is there a "right" or "proper" way of doing this? Is something like this covered somewhere in the docs?
I'd like to do my own searching, but I have no idea what exactly to look for, and current attempts at finding the right information, so far have yielded no helpful (or even relevant) results.
Any help at all will be greatly appreciated. I am new to WPF, but have been making a lot of progress this past week!
Thank you!
P.S.:
I just thouhght of something. If the solution was to draw what is needed for one screen, and when it is time to display the next screen, just dispose of/hide everything and create/display the new stuff, then how would we get around this? Because we can't/shouldn't change XAML markup at runtime, can/should we? :/
Not sure how you drawn your views/states in WinForms (direct painting on a Graphics object?).
The closest to what you're describing is the VisualStateManager. You can use it to statically define several visual states inside a single XAML and transit between them (using a smooth animation if you want).
If what you've done was show different Forms with Show/ShowDialog(), then the equivalent would be to use different Windows and Show/Hide them.
If you just cleared/added Controls to your form, then you can do just the same in WPF. Most Controls in WPF have a Content or Children property instead of Control.Controls in Forms.
I don't know if I understand what you really want. But here are my thoughts:
You can use several Windows and Show/Hide them accordingly
You can use the Frame/Page functionality in WP (MSDN)
if you really need to you could load your XAML and remove the topmost content in your Window and replace it with the loaded content
You could use the VisualStateGroup functionality to change the appearance of your current window
I think you will be happy with the second solution

Serializing MDI Winforms for persistency

basically my project is an MDI Winform application where a user can customize the interface by adding various controls and changing the layout. I would like to be able to save the state of the application for each user.
I have done quite a bit of searching and found these:
How to auto save and auto load all properties in winforms C#?
Save WinForm or Controls to File
Basically from what I understand, the best approach is to serialize the data to XML, however winform controls are not serializable, so I would have use surrogate classes:
http://www.codeproject.com/KB/dotnet/Surrogate_Serialization.aspx
Now, do I need to write a surrogate class for each of my controls? I would need to write some sort of a recursive algorithm to save all my controls, what is the best approach to do accomplish that? How would I then restore all the windows, should I use the memento design pattern for that? If I want to implement multiple users later, should I use Nhibernate to store all the object data in a database? I am still trying to wrap my head around the problem and if anyone has any experience or advice I would greatly appreciate it, thanks
You don't want to serialize the actual control instances. They should be created and destroyed along with the Form they reside in. Rather look at what you let the user customize. Layout and position? Very well, save out the Top and Left coordinates for each control along with a control identifier. Do you let the user add new controls? Save their ids along with a type identifier so when its time to reload you are able to recreate the controls at their previous position.
Whether you use XML or some other format, there is no best approach or best practice, choose what makes sense for your project. XML happens to be an easy to go with format with great support in the .Net Framework.
I know there is a software, LinsUI Layout Manager, which handle your problems very well. They have free version for interested developers. You can check the site.
Cheer

Categories

Resources