Memory usage is probably one of the most misunderstood things about Windows. It's, of course, not helped by the fact that there are so many different kinds of memory reports, and these reports are often deceptive if you don't understand how they are calculated or what they mean.
First, Windows does try to use as much of your memory as it can at any given time. Although at some points, it simply doesn't have anything to fill memory with so you will see it actually empty. Most of the time, particularly if Windows has been running for a while, you will see that memory is actually being used by caching behind the scenes (this is not always obvious, but its there if you look). This can be disk cache, network cache... memory is also used by the kernel which is not visible in the task list. You see this in the section marked "Paged Pool" and "Non-paged pool". This is typically memory used by drivers and other kernel objects.
There are also technologies such as SuperFetch, ReadyBoost, and others that allocate memory behind the scenes for caching but don't typically appear in TaskManager.
Windows will always leave some memory free for "on demand" allocation, so that when an app suddenly needs a big chunk of memory, it's available without it having to first drop pages from the cache or page active pages to disk. Windows will even go so far as to actively prune working sets of infrequently used code (typically startup code that is run once, and the like) and write it to the pagefile to maximize available free ram.
Another aspect of Windows memory management is that it uses what's known as "page backed executables". What this means is that every application you run is mapped into memory as if it were a mini-pagefile. This allows windows to simply discard pages from memory and reload them (via pagefault, ie when accessed), rather than having to load the code from disk and then write it to a separate pagefile. So even if you have no pagefile, Windows still treats applications as pagefiles.
All in all, Windows memory management is very complicated.. and the more you mess with it manually, the harder it is for Windows to react to conditions at runtime. In most situations, its best to let Windows manage your memory management. There are exceptions of course, but for most people you will get better performance by letting windows handle it. Trying to outsmart the OS often ends up tying its hands, and you end up with worse performance.