 |
|
1.
|
As we can see now on the home page, the Max project has ended. It was a real blast, and I had the opportunity to learn a lot about Avalon (now WPF) and to create a really cool product.
As the project closed, I decided to make a move in the company to where I can continue to work on cutting edge graphics and user interfaces, namely the Windows Client team. As Vista has been completed, the team is busy figuring out what the next version of Windows will look like, and this is an exciting team to move over to the team and help with that figuring out.
Just because Max does not work anymore does ...
|
 |
|
2.
|
After our last installment, which was written many moons ago (literally), the only remaining thing left to do (apart from clean up the code a bit) was to implement the IScrollInfo.MakeVisible method. Somebody has requested that I address this, so I am going to attempt to fulfill that.
The idea of MakeVisible is that it is called to ensure the visiblity of one of the children in the Panel. When will this be called? Well, if you fire up the AnnoyingPanel sample that has been written in the past three chapters, and click one of the buttons, you will notice that the application will crash becau...
|
 |
|
3.
|
Note: This is *really* late in being posted, but I had work to catch up on when I got back :)
The last day of SIGGRAPH 2006. I divided my time between papers and sketches, so there was a lot to push into my already overloaded and sleep deprived brain at this stage. But I gave it a college try.
The first paper that I caught was most of the "Streaming Computation of Delaunay Triangulations" paper. The main advantage of this approach was being able to do both the input and output of the triangulation as a stream without large intermediate storage, and a modest memory requirement. The algorit...
|
 |
|
4.
|
The first thing that I saw on day four was the paper "Photo Tourism: Exploring Photo Collections in 3D". It demonstrated a system for taking a collection of images that were taken in a similar area (such as in a town square), extracting features common across the photos, and using those features to estimate the position of those features in space.
An application for efficiently browsing this space was also presented. This technology can be seen in Photosynth, from Live Labs. This is an awesome technology, and it combines several different aspects of image processing and 3D rendering.
At ...
|
 |
|
5.
|
Today I tried to get an early start on the day by avoiding the infamous Boston Big Dig inspired traffic and walking to the convention center. It was a great route that took me past the Boston Common and through Chinatown, and past a very Bostonian train station (South Station). I don't know if the walk was faster than waiting for the shuttle, but I did make it to the first paper talk of the morning.
The first paper was "Real-Time GPU Rendering of Piecewise Algebraic Surfaces". This is a paper by Charles Loop and Jim Blinn that builds on a similar theory to their 2005 paper "Resolution inde...
|
 |
|
6.
|
The second day was very different to the first, with some papers being presented, a trip through the art gallery and the animation theatre at night.
Due to some traffic snarling, I missed the first couple of papers in the morning (a situation that I rectified the next day by walking past the Boston Common to get to the convention center instead of taking a bus). I did manage to pick up two paper presentations from the morning session, though.
The first one was "A Spatial Structure for Fast Poisson-Disk Sample Generation" which showed a very good technique for generating Poisson sample se...
|
 |
|
7.
|
This is the first of my posts describing my experiences at SIGGRAPH 2006. I will try to have a post every day summarizing what I see. Everything here is my personal opinion.
The first day of the conference is a little more low key than the other days, by the look of things. The exhibition is still being set up (you can see it when you walk across bridges) and there are no paper presentations. There are courses, however, and given that there was not much else going on I decided to go to one to get my learning on.
The course I chose was this one. Basically there were a bunch of different le...
|
 |
|
8.
|
I have posted before about the philosophy behind the ItemsControl, and now I will pull together some concepts from previous posts. I will use the RadialPanel and some ValueConverter magic to show how we can take a ListBox (the most famous of the ItemsControl family) and have it:
Respond to changes to a data collection.
Swap between using a radial and stacking panel.
Swap between showing the text of the items and showing the hash of the items.
One of the first things we need to do in order to build this sample is make a subclass of the RadialPanel that does not require the items to h...
|
 |
|
9.
|
I like to think of the technique I am about to demonstrate as the Ramora pattern - it allows you to attach a chunk of logic to any existing element that you have.
The RadialPanel example showed an example of storing information on an element using attached properties. In that example, we did not need to know when the property changed because we used the appropriate metadata to tell WPF that it affected the arrange part of the parent's layout.
What we will build now is a simple app that shows a bunch of buttons, and we will have the buttons change their background when you have the mouse ...
|
 |
|
10.
|
One of the coolest features in Avalon is the property subsystem. While it might seem difficult for some that Avalon has a property system built on top of the normal CLR properties, the power that this system gives you is incredible and is part of why a lot of scenarios in Avalon require less code than their counterparts in other systems.
One cool thing that the property system in Avalon allows is attached properties. The simplest way to explain an attached property is that it allows the place where the property is defined and the place where it is stored to be completely different classes ...
|
 |
|
11.
|
I finally found the settings in my blog that allow me to keep track of comments. For some reason, I thought that it was set to notify me when I got comments and it was not.
While I was there I found the old comments that I neglected to moderate and pushed them out. Sorry for the lateness in moderation folks. Hopefully it will get better. At least only two people were affected. If I had readership like Scoble then a lot more people would be stuck in moderation :)
Richard Morgan asked a good question about WrapPanel that I will try to address soon too.
|
 |
|
12.
|
One of the handy things that you can do with data binding in WPF is that you convert the data as you pull it from the data source. The mechanism for this is the IValueConverter interface. Let's say that you have a list of numbers representing positions in a race, and you want to display this list with the appropriate positional text (for example, 1 is 1st, 2 is 2nd, 3 is 3rd, etc). Rather than save your data in this form (which would not be convenient at all) you could leave the data as an int in the data source, and write a value converter to convert the integer into the appro...
|
 |
|
13.
|
Whatever tiny readership I have has probably noticed that I have tried to clean up the blog a bit, fix up some links and post some new content. I even picked a spiffy new blog template.
Hopefully the momentum can be kept up this time. My post count is woeful, and I always procrastinate writing on the blog. Lately I have thought of some WPF tips, tricks and learnings to share, and I will try to keep up a few posts a week.
If anybody has questions on anything to do with WPF, please email me or leave a comment on the blog. I would love suggestions on what topics to write about. In the proces...
|
 |
|
14.
|
One of the cool things about ItemsControls is that you get to separate the data binding and item control logic from the layout logic by specifying the Panel that you want to lay items out.
There are two ways of specifying a Panel for an ItemsControl. One of them is to use the ItemsPanel property, which allows you to specify an ItemsPanelTemplate that is used to instantiate the Panel of choice.
The other method is to have a Panel in the Template for the ItemsControl, and set IsItemsHost to true. This will tell the ItemsControl that this Panel is the one who is hosting the Items for the Ite...
|
 |
|
15.
|
One of the little things about a HTML editor is the way that block formatting works. Most users probably don't realize when they run into these kinds of problems, but they do.
The reason why editors have a hard time is because they are trying to emulate a word processor with some things. There are simularities between HTML and word processing documents - both have paragraphs, headings, bold, etc. But there are important differences as well. Forcing things too much into a mold with word processors can hurt you.
One thing that we got feedback about, and that I did not like myself, was that ...
|
Jump to Page: 1 2 3 4
|