I’d like to announce a new and improved version of Bling WPF. In this version, we have redone the wrappers around WPF databinding and pixel shading for better usability, while a lot of documentation and examples have been added to the distribution and the Codeplex page. Finally, we’ve also added some experimental support for UI physics with an example! A release for Visual Studio 2008/.NET 3.5 SP1 is available at http://www.codeplex.com/bling. For anyone unfamiliar with Bling, here are the primary features:
- WPF Databinding without IValueConverters in C#! For example, “button.CenterPosition.X = slider.Value * MainCanvas.Width” is valid C# code in Bling that will setup a databinding relationship that binds button’s LeftProperty to something that will move it with the slider.
- WPF pixel shaders in C# without HLSL code or boilerplate! A pixel shader is simply a texture-to-pixel function, e.g., “canvas.CustomEffect = (input,uv) => slider.Value.Lerp(input[uv], ColorBl.FromScRgb(new PointBl(1,1,1) – input[uv].ScRGB, input[uv].A));” is a one line pixel shader that will invert all the colors in canvas interpolated with respect to a slider’s current value. No need to write HLSL code, no need to write a custom effect class.writing a pixel shader is boiled down to its core function.
- Bling defines many WPF convenience properties; e.g., Size is defined as (Width, Height), Right is defined as Left + Width, CenterPosition is defined as LeftTop + Size / 2. Convenience properties are just like properties that are backed directly by dependency properties; i.e., they can undergo databinding, be used in pixel shaders, and so on.
- Bling code is completely compatible with conventional WPF code. Bling wrappers are stateless so you can use Bling functionality anywhere in your program regardless of architecture.
- UI Physics! Did you wonder what would happen if property bindings were solved via a physics engine rather than a databinding engine? Well, ok, probably not J, but the result is cool and could possibly be the future of UI toolkits. I’ll write more about this later.