First of all, i had no intention of this being so long, but i needed to be thourough, so here goes.
I have been a Code Project member for so long that i feel guilty for not contributing more to this wonderful site. I recently have begun converting a Windows Form application that I wrote to WPF. I can safely say that I am really comfortable using Windows Forms because I have been programming using them for years. Before that, MFC windows apps. I'm not afraid of a challenge, and I really believe that in the long run my application will be better for making the transition to WPF. Thus, comes the issue.
My Application is a retail photo editing application that is used exclusively in our stores to sell printed photos to people These photos have been adorned with "Borders" or "Frames" that are bitmap based. Basically, I have a set of "Layers" that comprise my product. The picture, the Bitmap border, and maybe some little adorner decals and a text layer or two. Each layer has a z-order and in my WinForms app is neatly rendered by a custom control that i wrote using old style GDI+ drawimage commands and a-lot of refreshes everytime something changed.
When I say everytime something changed i mean if the user dragged the photo to a new position under the border or changed the zoom, colors, saturation etc the application would have to redraw everything reflecting the changes. Needless to say, that in order to achieve realtime rendering of all these effects, i had to use a scaling factor and cached, smaller bitmaps in order to get these things to happen in realtime. It was a real pain to keep everything straight.
Then comes along WPF and turns everything upside down for me. I now have a new rendering system that natively supports transparency and has pixel shaders for the effects such as saturation and chroma key. I have done some tests with raw bitmaps and all of these effects can be achieved realtime with no problems on todays hardware. Everythings good right?
Wrong. I have converted everything but what i call the main Workspace control. I am soooo stuck on this it isn't funny to me anymore. I have been reading everything i can get my hands on and I guess I am too close to the problem because I am hopelessly stuck trying to decide how to implement this. I have a .xml file that describes how a picture should be placed in a border. meaning the top left and size depending on the orientation and aspect ratio. This is already done from my winforms application, so i have all of the info i need. I would love to make a control that would work in my "Real world" coordinates. Just so you know. My bitmaps are 300 dpi bitmaps so they are large. like 2700x3000. I think i should be able to make some sort of composite control that is like a canvas that holds all of my "Layers" and places them at there respective coordinates and shows all of the content even though it is huge, all in a small control, say 600x600.
I can see 2 ways to do this. Do as i said, and layer image controls in some sort of layout control, but i have no idea how to translate the coordinates or does WPF handle that automagically for me? or create a control and use drawvisuals in order to make the composites. I have been trying to get something to work for days and keep running into walls. I know that this comes from a basic lack of experience in the WPF layout technologies, but i need help. I thought this topic would maybe someday make a good 1st article for me. So what do you think? Any help? Ideas? Good idea for an article?
I figured that I would post what I did here for others to see how I approached it and to comment on my thoughts.
I took a step back and with a deep breath did some research on custom panel layouts. It seems that I really needed to understand this because i made a custom panel layout somewhat akin to a cross between a Grid and a Canvas. Got it to auto size the composited bitmaps into the size of the panel by figuring out a global scale in the MeasureOverride. That way i still get the benefit of attaching pixel shaders to the image objects if i need to do saturation,chroma key etc...
Please tell me if you think this could help others so i can think about making it an article if useful.
In my Windows Forms application I have a listbox on the form. This is a multiple selection list box.
I can use SelectedIndices property to get the indices of all the selected items.
However, given an index number, is there a simple way to tell if the item is selected or not? Right now I search the SelectedIndices to see if the index is there. I wonder if there is a method call to tell me directly if an item is selected or not. I tried to find that but couldn't.
Silverlight doesn't have commanding and lacks many of the
data binding features of WPF, but often these can be emulated
in a few lines of code in code-behind, which may apply to the view
but should only break your model if you chose. You do know the XAML
just gets converted to code too, right? So extending, for example, a
UserControl's XAML with some code in the UserControl's class is just
the same as adding XAML.
Ok, I shall try to explain as thoroughly as possible the problem I'm experiencing.
I have TextBox in a tab on the left of my window (Text1). The rest of the window has another TextBox (Text2). As I type into Text2, if I press F12, I grab the current word and try to put it into Text property on the TextBox Text1. Although the TextChanged event fires and I can see its Text property has been set, visually it isn't set and the code dependant on the new value runs and then 'unruns' if you follow me.
I don't know if this is a focus issue or something, but there are no exceptions in the output window and no more major breakages.
Does anyone have any idea what I might be missing here?
Yeah, this is WPF. I know what you mean, but I don't set the Text property anywhere else or set e.Handled to true or false anywhere.
When I set the Text property, TextChanged fires on that TextBox as normal. In that handler, I read the value out to use it for other purposes. All this code does run ok, but visually, it's as if nothing happened!
This is odd. I'm going to try and create a simple WPF app with 2 TextBoxes and do something similar.
If you have any other ideas, I'd love to hear them.
I have a maintenance database table(having ColA(primary) and ColB(varchar)) being records inserted using asynchronous web service.Before inserting a new record into table on save button click event,i have to check uniqueness of record.So, When i send query request to check with given record Webservice completed event is raised after the save button click event.So, I am not able to check the uniqueness using asynchronous web services.Please help me in finding a solution for this.
I am altering my existing application developed using MS Access + VBA. I have created new window (wpf) which handles some tasks. I want this window to be loaded on button click from old MS Access application.
I'm pretty sure my recommendation will fix both your issues.
When Silverlight 3 was released, I uninstalled Silverlight,
the silverlight VS tools, and the toolkit. Then I downloaded and
installed (in order) everything on the Get Started Building Silverlight 3 Applications[^]
page. Except for some namespace shuffling (they keep changing stuff for WPF
compatibility and when controls get migrated from the toolkit to the
framework) everything works correctly.
The toolkit is essentially beta, so I highly recommend keeping
up the latest version. They are fixing stuff every few months.
July is not the newest.
Microsoft MVP - Visual C++
Last Visit: 31-Dec-99 19:00 Last Update: 3-Dec-23 11:37