Googled around and couldn't find anything... essentially what I want to do is allow the user to click and drag data points around to new values on a line graph control. The built-in chart control is pretty robust, but as far as I can tell, there's no way to add this kind of interactivity (am I overlooking something?).
I figured it would be a pretty hefty task to do this on my own, so I wondered if anyone had stumbled across this before and made a custom control to do it.
If not, any guidance on where the best place to start would be for making a custom control to do this?
Womp... solved my own question, turns out I was just Googling the wrong things. Ended up implementing a version of this:
http://social.msdn.microsoft.com/Forums/vstudio/en-US/2bc4823c-1365-40ee-a239-b6f0c65a539a/datapoint-drawing-position-and-interactivity?forum=MSWinWebChart
It essentially uses the HitTest method of the built-in chart control to determine what point was clicked on MouseDown and just changes that point's X and Y on the fly in the MouseMove event. Pretty nifty.
Related
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
I've got a c#, .net 4, mdi Windows Forms application which configurates a product. The product is one of a kind, it always looks different but similar.
I would like to create a simple technical 2D drawing which is created and shown based on the user input. My idea is, that the user enters the product data in one mdi form and the drawing is shown in another mdi form. The drawing should be created in its own thread, so the user does not have to wait for it.
About the drawing:
It should contain lines and rectangles with different colors, filled and unfilled. Some lines/rectangles have text information next to it, f.e. to show the dimensions or a name.
I am not sure which way i should go to create the drawing. My first ideas were to use Microsoft Visio Drawing Control or just to draw on a Form. But i am not sure if thats really the way to go.
I am grateful for any suggestions. Are there any other good libraries for simple 2D technical drawings? Is Visio or Windows.Drawing the way to go? Any other ideas?
/edit: example drawing:
/edit2: it would be useful, to highlight shapes programmatically. Also useful would be a shape mouse over event.
I used WPF as suggested and host it in ElementHost. It works pretty good, polygons have mouseover events, so you can highlight/select them and show detailed information about a linked object.
There are lot of tutorials to get started with drawing polygons and stuff. A bit more tricky was to implement zoom and drag features. Therefore i found this example which i can highly recommend: WPF simple zoom and drag support in a ScrollViewer
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
My question is very general, I'm making a project and referenced two projects(graphsharp and wpfextensions). These are helping me to create graphs.
When I created my graph for example I can easily drag the vertexes or move the graph by clicking the empty space in screen etc..
But I do not know what is happening in background, for multitouch capabilities, I need to find what is going on when a mouse event raised.
Therefore my question is how to find these events and methods in a lot of source files ?
Thanks.
The question does really general and fuzzy but probably some tool like Snoop http://snoopwpf.codeplex.com/ will help you (here you can take a look how it works and looks http://blois.us/Snoop/). There is "Events" tab for selected part of UI of your application where you can investigate all the way of Event through a visual tree and see who (which control) has handled this event. Then you should check the control that handled this event and see if it's something you are looking for.
I know that when a drag/drop operation is completed, upon receiving a MouseUp or Esc key event, it returns an enum that indicates what happened (Move, Copy, None, etc.) My question is this: is there a way to send back status information to the form/control that initiated the drag event, while it is going on?
The use case is as follows (think Visual Studio-esque layout manager for all of this): I am writing a layout/window managing component that allows regions of the layout to be dragged around. I use a transparent form to paint a semi-transparent overlay that changes based on where the mouse is dragging over, a la the preview overlay that appears when dragging windows around in Visual Studio.
Another motivation is that the serialization process I describe is relatively resource intensive, and I'd prefer not to do it if the dragging is all going to occur within the same process/window. So, if there was a way to lazily serialize only when an actual "drop" in another window happens, that would probably make all the difference in usability.
What I want to do is enable dragging between different windows or even different instances of the application. I've already plumbed out the serialization code and everything, but the issue is that, when I drag a chunk of layout into another window, the first window doesn't have any way of knowing that the mouse is now over another instance of the application, which is more than capable of painting its own overlay. So, the original overlay hangs around like an idiot and my program looks like crap.
Is there any way for me to pass along some kind of callback or is there any message or property I can listen for/poll during a drag operation that will tell me if my mouse pointer is over a region that can accept its data? Please don't make me resort to listening for the CursorChanged event, I've already lost too much self respect using reflection to hack around weird wpf/winforms dragging interop bugs. If anyone could suggest a clean resolution for this problem I would be extremely grateful.
Additionally, if anyone could point me to any favorite sites which describe how to go about doing reeeeally funky things with drag and drop, it would be appreciated, as I've found there is quite a lack of really nitty gritty information available about dragging. Usual things like custom cursors and the like are okay, but I'm probably more interested in Win32 black arts and the like.
UPDATE:
I actually just found out about the GiveFeedback event a second ago, came back to my question, and there it was. Huge facepalm moment. However, since I've got you here, what about my second question: is there any way to lazily load the information only when it encounters a valid target? Could I somehow implement my own IDataObject or do things get marshaled righ when the mouse leaves the form? GiveFeedback provides me only with whether there's a valid target under the cursor, but doesn't let me change what data is being dragged...
ANOTHER UPDATE:
Is there any way to determine the source of a drag operation? That is, when my control receives a DragEnter message, how can I tell if the source of the drag is my own control or a foreign one? I know I can hackishly encode it by messing with the AllowedEffects property, but is there any more direct route?
Check out the GiveFeedback event (there's a nice article here) - that sounds to me to be exactly what you're after.