I have built a test-vista machine to do some WinFX stuff on and it got me wondering...why do I need to run the WinFX runtime installation on Vista? Isn't this supposed to be pre-installed? Aren't some built-in Vista apps already using WinFX? I am so confused. Anyone know?
Avalon WPF DataBinding Article has gone live on MSDN. Take a look. Part 2 will be published next week.
I use ListBox's and DataTemplates a lot to show data in different ways in WPF. One of the problems I've faced is how to change the look of the "Selected" element. All the examples I could find assumed you were not using a DataTemplate. Luckily Chris Sells came to my rescue and pointed me at the ItemContainerStyle. Using a Template for the ListBoxItem in the ItemContainerStyle let me control the look and feel of the Selected element (or disabled items) easily.
What I wanted was a nice glow effect instead of the default blue background:
If you are doing any WPF development, get this new *free* (as in beer) tool from Chris Sells (with help from Ian Griffiths) that allows you to see the template of the built-in controls. It lets you see what the template is and what the control looks like across different themes. If you are writing your own controls (or just templating a built-in control) its a great way to 'borrow' from their ideas and make them better.
I've worked up a simple example of how to use Commands in WPF. This example includes:
I've been digging a bit into how themes work for a new article. In doing that I wanted to see how WPF used their theme files. Their theme files are stored as BAML in the PresentationUI assembly. As usual reflector came to the rescue with a BamlViewer plugin (available as part of the ReflectorAddIn's CodePlex Project).
I've been digging into the Command infrastructure in WPF lately and I really like the way it works. Essentially it is a way to separate the idea that you have commands that a particular applciation can execute and the ways you start a command (e.g. menu, toolbar button, context menu, hotkey, pen gesture). WPF comes a standard set of commands that are commonly used (e.g. New, Close, Copy, Paste, Cut, etc.). You can define your own commands fairly easily as well.
In the XAML you can declaratively specify the commands like so:
On Ian Griffiths blog (a must for any WPF developer), he shows a way to bind to the Length of the column in the template of the ListView's Grid to make the columns look right. Check it out here:
It's not finished yet, but I am working on a Font Browser using Avalon. It's fun to work with XAML and code-behind, but without splitter or treeview controls its hard to make something really fun. I am also working on a database browser with Avalon, but until I find a tree view that project is dead.
I will post the font browser this weekend.
Here is my first Avalon application. Its a Font Browser that shows all the fonts, allows you to specify a test phrase and size and will show Font alternates for a particular font, though I don't have any font's with alternates so I couldn't see this in action ;)
I had a great time tonight talking about all things XAML at the Atlanta Visual Basic Study Group. There were plenty of interesting questions and it's clear the Cider and Sparkle have come a long way, but still have a way to go. It was interesting to see how many people seemed to still tie WinFX with Vista and machine upgrades. I am glad to see how well everything runs on my XP boxes.
I don't do enough book reviews on this site, but I felt that this book has influenced me enough to say something. Chris Sells and Ian Griffiths have a great book on their hands. I enjoyed the "Hello Avalon..." approach to the early chapters, but this book really helped me delve into the the tricky details of XAML data binding, animation and click-once deployment of WPF apps. I tend to not finish reading most technical books because they are written as references, not books. This book takes the departure and is actually readable. Chris and Ian are both masters of a story-driven approach to technical writing that I really enjoy. If you want to understand what WPF is all about or are using XAML in new projects, pick up this book.
I've been digging into some of the open source and 3rd party controls that are becoming available for Silverlight 2. While running into some odd issues with some of them it occurred to me that there are some design guidelines that haven't been well communicated. Back in the early days of WPF I learned (though exactly where is unclear) that every control should support an empty constructor and that all properties (e.g. XAML Attributes) should have a default value. I knew this to be true but I couldn't document where it came from.
So as usual when I am stuck, I contacted Chris Sells as he was my mentor in early XAML usage. He was at MSDN at the time gathering content and helped me get the Data Binding articles as well into the Software Design Review for WPF (then Avalon). If anyone could help me figure out where I learned this, he'd know. He reminded me of the language they use internally: "Create-Set-Use". Essentially this means that the design pattern for controls is that they should work without requiring any properties:
As I wrote and subsequently taught the Silverlight Tour workshop, I've had a number of discussions with students, clients and the community-at-large about how to architect Silverlight applications.
|Using Visual Studio Code for ASP.NET Core Projects (new)|
|Implementing and Securing an API with ASP.NET Core (new)|
|Building a Web App with ASP.NET Core, MVC6, EF Core and AngularJS|
|Building a Web App with ASP.NET5, MVC6, EF7, and AngularJS (Retired)|
|Best Practices in ASP.NET: Entities, Validation, and View Models|
|Front-End Web Development Quick Start|
|Lessons from Real World .NET Code Reviews|
|Node.js for .NET Developers|
|Application Name||WilderBlog||Environment Name||Production|
|Application Ver||18.104.22.168||Runtime Framework||.NETCoreApp,Version=v1.1|
|App Path||D:\home\site\wwwroot||Runtime Version||.NET Core 4.6.25211.01|
|Operating System||Microsoft Windows 6.2.9200||Runtime Arch||X86|