» Publishers, Monetize your RSS feeds with FeedShow: More infos (Show/Hide Ads)
These last few weeks I’ve been writing control designers for Visual Studio 2010 Beta2 WPF and Silverlight controls.
Turns out this is much easier than I expected and is a lot of fun too!
This application is an example for writing a globalized WPF & Silverlight platform neutral control designer. Both WPF & Silverlight applications use the same Design library. You can check out the source code to see how this is done. This source code is in VB.NET. Later this week, I’ll be posting another full featured article and code example in C# and VB.NET for writing a platform neutral control designer for WPF & Silverlight custom controls. The project also includes two controls you can use in your projects. (Yes, Karl now speaks C#. Took about 2 days to pick it up. Still have to lookup some syntax but pretty fluent now.)
I must give credit where credit is due. I got a good bit of feedback and suggestions from my teammates on the Cider Team (WPF & Silverlight Designer Team). Thanks Mark, Zhanbo, Bin, Pav, Marco, Ben and Ray. My great friend Josh Smith also came over one day for some pair programming activities. Thanks Josh!
For those that care, the above designer is an MVVM application that is completely data driven from the ViewModel.
Grid Layout Tool
The Grid Layout Tool provides an abstract view of the selected Grid control in the designer that enables editing the Rows and Columns of the selected Grid.
The above image is the Grid Layout Tool that allows you to:
- Move (reorder) rows and columns
- Move (reorder) multiple rows and columns (when multi-selected with CTRL+click)
- Insert row or column before or after any row or column
- Delete row or column
- Set all row or all columns sizes using the TextBoxes at the top. Enter value and press ENTER.
- Set individual row or column size by clicking the text value the Azure row or column headers and then editing them. Enter value and press ENTER.
- To set size to auto type “a” or “auto” and press ENTER.
- Designer is updated real time as you make your changes.
- Clicking the “Save” button commits the changes into one Undo Transaction.
- Clicking the “Cancel” button cancels all changes and puts the designer back in its original state.
Menu Options
This menu is only available when you have selected a GRID control in the WPF or Silverlight designer.
Chainsaw – Leaves Alignment
The chainsaw will remove all Margins, MinHeights, MinWidths and from CheckBox, RadioButton, Label, TextBlock will remove height and widths and on TextBox will remove height. Will set all Grid Rows to Auto. Will remove Name and x:Name if enabled.
Use this command if you do not have styles defined that determine layout for your form. (see video)
Chainsaw – Clears Alignments
The chainsaw will remove all HorizontalAlignments, VerticalAlignments, Margins, MinHeights, MinWidths and from CheckBox, RadioButton, Label, TextBlock will remove height and widths and on TextBox will remove height. Will set all Grid Rows to Auto. Will remove Name and x:Name if enabled.
Use this command is you have a styles defined that determines layout for your form. (see video)
Modify Control Tags on Create
If this option is checked the following controls will be affected when you create the control using the ToolBox.
StackPanel and Grid – Alignments and Name cleared (note: when the StackPanel is created inside a GroupBox or Expander, the tag modifications are ignored and overridden by the designer.)
TextBox, TextBlock, Label, CheckBox, RadioButton – smaller sizes than the Visual Studio defaults and Named is cleared. The smaller sizes widths were 120, now 80, except TextBox which is 100. You can play around with control creation to see if this makes sense for you.
Modify Control Tags and Chainsaw Clears Name
If you want control names cleared by the Chainsaw or the control Modify Control Tags on Create feature check this menu option. To turn off name clearing, uncheck this menu option.
Video
PLEASE view this short tutorial video. You will get a full and quick understanding of this great feature.
This video is on my SkyDrive. Silverlight Streaming is being discontinued and won’t let me upload any more video files. Like many others, I’m trying to find an alternate location to host all my training videos. Relocating and re-pointing all my videos will be a huge PIA. Any suggestions for hosting would be greatly appreciated.
The below video can be downloaded and viewed. Click the link to be taken to my SkyDrive.
XAML Power Toys 2010 Beta2 for Cider Tutorial Video (13 minutes)
Downloads – Visual Studio 2010 Beta2 ONLY
This software will not work in the final release of Visual Studio 2010. That includes RC/RTM releases. I will release a new version when RC (release candidates) are published.
Remember – Please build your projects before attempting to create forms, ViewModels or using the Field List.
Please set your Control Defaults after installing, new options have been added.
Download now comes from my Windows Live Sky Drive.
Microsoft employees please read this: If you are running a real Beta2 release, these links and this software will work for you. If you installed out of the B2REL branch or used the public Beta2 download sites you have a real Beta2 install and can use this link.
If you installed Visual Studio 2010 Beta2 from an enlistment or a build out of Main, this version will not work for you. The control designer registration API’s have been updated for RC/RTM and checked into Main.
I will create a new setup package that uses the new API’s for you by close of business on Monday 26 Oct 2009. Please email me and I’ll send you an internal drop location you can get this software from. (Just look me up in the Global address book.)
XAML Power Toys 2010 for Cider – for Visual Studio 2010 Beta2 v1.0 Release (459 KB)
XAML Power Toys 2010 for Cider – for Visual Studio 2010 Beta2 v1.0 Source Code not required (85 KB)
Alternate Download Site
Some corporate firewalls do not allow access to Windows Live Sky Drive. You can download the installer here. Remember to rename the file from .doc to .zip. This is a requirement of WordPress.
XAML Power Toys 2010 for Cider – for Visual Studio 2010 Beta2 v1.0 Release (459 KB)
Your Feedback
I can’t not over emphasize the the importance and the weight of your feedback on this block post. My team (Cider Team that delivers the WPF & Silverlight Designer) is eager to hear from customers on features you need in the WPF & Silverlight Designer and XAML Editor.
Close
Hope you use and enjoy XAML Power Toys for Visual Studio 2010 Beta2 for Cider.
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in CodeProject, VB.NET, Visual Studio 2010, WPF General, XAML Power Toys
This post is the home page for XAML Power Toys for Visual Studio 2010 Beta2. Please post all comments and suggestions for this version on this post.
XAML Power Toys for Visual Studio 2010 has all the same features as XAML Power Toys for Visual Studio 2008 except as noted below. Please use the XAML Power Toys for Visual Studio 2008 page as a reference for how the the features work. Please download this version of the software below.
During development of XAML Power Toys for Beta2 I ran into some bugs that are being corrected for the final release of Visual Studio 2010. As a result I had to cut a few features for this release.
The below image displays the menu for XAML Power Toys for Visual Studio 2010 Beta2. Users of the 2008 version will notice the “Group Into” submenu is gone; the “Tools” submenu is gone and that “Create ViewModel for Class” is displayed in the this submenu but it shouldn’t.
The bottom line is, submenus are broken in Beta2 and there is no known workaround.
Notice I have moved “Set Control Defaults” and “About” features from the “Tools” submenu to this submenu.
The other grayed out menu options are not enabled because no XAML was selected when the screen shot was taken. All features on this menu work as advertised. “Create ViewModel for Class” just displays here in error and will never be enabled. It does work correctly in the C# and VB.NET Code Windows.
The good news is, the above software has been updated and works great in Visual Studio 2010 Beta2.
When the final release of Visual Studio 2010 is public I will release a new version without these limitations.
Downloads – Visual Studio 2010 Beta2 ONLY
Remember – Please build your projects before attempting to create forms, ViewModels or using the Field List.
Please set your Control Defaults after installing, new options have been added.
Download now comes from my Windows Live Sky Drive.
Download XAML Power Toys for Visual Studio 2010 Beta2 v5.1.0001 Release Installer (809 KB)
Download XAML Power Toys for Visual Studio 2010 Beta2 v5.1.0001 Source Code not required (594 KB)
Alternate Download Site
Some corporate firewalls do not allow access to Windows Live Sky Drive. You can download the installer here. Remember to rename the file from .doc to .zip. This is a requirement of WordPress.
Download XAML Power Toys for Visual Studio 2010 Beta2 v5.1.0001 Release Installer (809 KB)
Visual Studio 2010 Beta2 Known Issues
The below issues are known, being worked on and will be fixed for the RC/RTM milestone.
1. Can’t Add Menu inside an AddIn
This problem was first reported on MS Connect.
The workaround for this bug is to set the “Embod Interop Types” property to False for the “Microsoft.VisualStudio.CommandBars 8.0 Reference”
2. Submenus keep repeating
When adding a submenu to a menu you have added in an AddIn, the submenus will repeat the entire menu tree instead of just showing the submenu items.
This is why I had to remove the “Group Into” submenu and features. The submenus were simply unusable.
3. Setup project “Client Framework” problems
When I first compiled the Setup project for this release, upon installation I kept getting a message that I had to install the .NET 4.0 Framework. Obviously the full .NET framework was installed on the machine.
The only way I could get the message to not show up when running the Setup.exe, was to remove all references to the “Client Framework” within the solution.
Remember, in Visual Studio 2010 Beta2 all WPF and Class Library projects will by default target the “.NET 4.0 Client Framework.” This is a good thing as it makes application distribution and installation easier for customers of your applications.
However, in this Beta2 release, to get the files to install from the output of the Setup project I had to remove all references to the “Client Framework.”
Close
Hope you use and enjoy XAML Power Toys for Visual Studio 2010 Beta2.
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in CodeProject, VB.NET, Visual Studio 2010, WPF General, XAML Power Toys
At the request of a XAML Power Toys user I have updated XAML Power Toys for Visual Studio 2008 to version v5.0.0.01.
This update adds one new feature and corrects the v5 known issue.
The ViewModel creation window now allows selecting the name of the method that is used to raise the PropertyChanged event. You can thank Ted Warring for the suggestion. Awesome Ted, appreciate the feedback and feature suggestion.
ViewModel Creator Gets New Feature
The ViewModel creator tool makes building a ViewModel class a snap. This feature is sensitive to C# and VB.NET and will create the correct code for you.
The yellow highlight indicates the new feature added in v5.0.0.1. You can now select or type in the name of the method that will be called when raising a PropertyChanged event.
This name value is also used if you selected the Implement INotifyPropertyChanged option.
This name feature enables you to use any name in your ViewModel base classes and have the generated code us it.
As always, you can download XAML Power Toys for Visual Studio 2008 here:
http://karlshifflett.wordpress.com/xaml-power-toys/
Close
Hope you use and enjoy XAML Power Toys for Visual Studio 2008.
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in CodeProject, M-V-VM, MVVM, VB.NET, Visual Studio 2008, WPF General, XAML Power Toys
In .NET 4.0 WPF text rendering has been greatly improved.
However this new feature is not enabled by default.
You can read the complete feature write up on the WPF Text Blog.
The scenario where you get the most payback for using this feature is with text that is sized 15pt and below.
Line of Business forms containing TextBlocks, Labels, CheckBoxes, RadioButtons, Buttons and TextBoxes will have FontSizes below 15pt and will receive the most benefit of this new feature.
The feature is enabled by placing the “TextOptions.TextFormattingMode” attached property on the UI Element or on a parent UI Element.
<TextBlock Text=".NET 3.5 rendering" /> <TextBlock Text=".NET 4.0 improved rendering" TextOptions.TextFormattingMode="Display" />
The below XAML demonstrates how to have all text rendering use the new text rendering feature by placing the “TextOptions.TextFormattingMode” attached property on the Window.
In the below example, all child controls of the Window will use the new text rendering.
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" TextOptions.TextFormattingMode="Display"> <Grid> <TextBlock Text="Inherited the .NET 4.0 improved rendering" /> </Grid> </Window>
Visual Studio 2010 Beta2 and .NET 4.0 have a lot of new goodness, go check it out!
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in Cider Designer, CodeProject, VB.NET, Visual Studio 2010, WPF General
Silverlight 3 application demonstrating Sample Data.
Displaying Sample Data in the WPF and Silverlight Designer for Visual Studio 2010 Beta2 is now very easy with the design time DesignData markup extension.
The below video is a complete tutorial for using Sample Data in your WPF and Silverlight applications. Please take a view few minutes to view it.
The Sample Application templates have many comments in them, walking you through Sample Data. Please take a few minutes and review the projects created by the Sample Application Templates.
Beta2 Template Information
For Beta2, you need to use these templates to consume sample data in your projects. The reason is the winfx.targets file for was not updated with the Sample Data Build Actions in time for Beta2.
These project files have been modified to include the DesignData Build Action for the Sample Data files. All Sample Data files must have their Build Action set to DesignData in the properties window.
These templates will not be required for the final version of Visual Studio 2010.
There are really two templates.
1. <Language> <Platform> Empty Application – this template consists of an empty project file and the added Build Action DesignData.
2. <Language> <Platform> Sample Application – this template consists of a sample application that has sample data files and a UserControl that demonstrates how to consume the sample data. It also includes the added Build Action DesignData.
WPF Templates
VB WPF Application DesignData – Empty VB.NET WPF Application template with sample data support.
VB WPF Application DesignData Sample – VB.NET Sample WPF Application that demonstrates consuming sample data.
CS WPF Application DesignData – Empty C# WPF Application template with sample data support.
CS WPF Application DesignData Sample – C# Sample WPF Application that demonstrates consuming sample data.
Silverlight Templates
VB SL Application DesignData – Empty VB.NET SL Application template with sample data support.
VB SL Application DesignData Sample – VB.NET Sample SL Application that demonstrates consuming sample data.
CS SL Application DesignData – Empty C# SL Application template with sample data support.
CS SL Application DesignData Sample – C# Sample SL Application that demonstrates consuming sample data.
Sample Application Template Usage
The WPF and Silverlight sample application template creates an application complete with sample data files, entity classes, a UserControl consuming the sample data files and
xmlns:d – How To Easily Add The d: Namespace
All design time properties live in a design time namespace that is part of this schema: http://schemas.microsoft.com/expression/blend/2008.
Examples of design time properties are, d:DesignWidth, d:DesignHeight, d:DesignInstance, d:DesignData, d:DataContext, d:Source.
In order to use the d: properties you must have a xmlns declaration in your XAML. In Visual Studio 2010 there is a very easy way to add it to a Window, UserControl or Page .xmal file.
If you select the root control, you’ll see a Root Size Mode button displayed in the lower right hand corner. Clicking this button changes the size mode of your root container from Auto to Fixed or from Fixed to Auto.
If the d: namespace has not been added to the root control yet, clicking this button will do it for you. In addition to the d: namespace, mc: is added and the mc:Ignorable is added also.
I have modified each of the starter templates below to automatically add this for you. However, as you add new Windows, Pages or UserControls, those templates may not have the d: namespace declarations, so the above trick comes in handy.
Adding a New Sample Data File
Open an existing Sample Data project or Create a new project using one of the Sample Data templates.
Add a resource dictionary to the project naming it <my entity class name>SampleData.xaml.
For example: Customer sample data file would be named, “CustomerSampleData.xaml”
The the file properties as pictured below:
Build Action: DesignData
Copy to Output Directory: Do not copy
Custom Too: <blank>
Editing a New Sample Data File
This is an example of a single instance sample data file.
<local:Customer xmlns:local="clr-namespace:WPFApplication2" Age="21" Email="jim@hotmail.com" FirstName="Jim" LastName="Smith" />
Sample Data files allow you to construct your objects in XAML. You can set the required properties as illustrated above.
The below code illustrates how to create a collection of items in a sample data file.
<local:Customers xmlns:local="clr-namespace:WPFApplication2"> <local:Customer Age="21" Email="jim@hotmail.com" FirstName="Jim" LastName="Smith" /> <local:Customer Age="22" Email="jane@hotmail.com" FirstName="Jane" LastName="Smith" /> </local:Customers>
The above Customers class derives from the Generic List of Customer.
Consuming Sample Data in WPF
<!-- DataGrid Sample--> <Grid d:DataContext="{d:DesignData Source=/SampleData/PeopleSampleData.xaml}" Grid.Row="1" Margin="7"> <DataGrid ItemsSource="{Binding}"/> </Grid>
Sample Data is exposed through the d:DataContext design time property. Design time properties are not compiled into your applications.
In WPF this is how you start at the root, navigate to SampleData folder and get the xaml file.
Consuming Sample Data in Silverlight
<!-- DataGrid Sample--> <Grid d:DataContext="{d:DesignData Source=../SampleData/PeopleCollectionSampleData.xaml}" Grid.Row="1" Margin="7"> <data:DataGrid ItemsSource="{Binding}"/> </Grid>
In Silverlight you have to ../ up to the root, then navigate to SampleData folder and get the xaml file.
Slight difference between WPF and Silverlight.
Video
PLEASE view this short tutorial video. You will get a full and quick understanding of this great feature.
This video link supports right click, save as…
Sample Data Tutorial Video (22 minutes)
Installing Templates Using The Download
For VB.NET copy the download to:
C:\users\<your user name>\Documents\Visual Studio 2010\Templates\ProjectTemplates\Visual Basic
Unzip the download in this folder. You should have 4 zip files in the folder. You are ready to go.
For C# copy the download to:
C:\users\<your user name>\Documents\Visual Studio 2010\Templates\ProjectTemplates\Visual C#
Unzip the download in this folder. You should have 4 zip files in the folder. You are ready to go.
Downloads
After downloading one or both template downloads, you’ll need to rename the file extension from .doc to .zip. This is a requirement of WordPress.com.
Requires: Visual Studio 2010 Beta2
Silverlight Templates require: Silverlight 3
VB.NET Project Templates (61KB)
Installing Templates From Within Visual Studio 2010 Beta2
The sample data templates will also be individually available on the Visual Studio Code Gallery on 10/27/2009.
To use a single template open the New Project Dialog and select the Online Templates tab at the bottom left. You can browse all available templates or search for “design” and all the templates will be listed.
Close
Hope you use and enjoy Sample Data in Visual Studio 2010 Beta2.
Gentle reminder, please watch the above video too.
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in CodeProject, Silverlight, VB.NET, Videos, Visual Studio 2010, WPF General
audio/x-ms-wmv (40 998 ko)For the past few months I’ve been sharpening my Windows 7 skills and discovered what many systems people already know; “you can easily setup and boot Windows 7 or Server 2008 R2 VHD.”
Someone may already be thinking, why do I need to boot a VHD?
It’s no secret that Microsoft will be shipping Visual Studio 2010 Beta2. If you want to be notified when Beta2 ships you can sign up here: http://www.microsoft.com/visualstudio/en-us/products/2010/default.mspx
Some developers prefer to install beta software on a non-production machine or set up a multi-boot box.
This is where VHD’s come into play. You can setup a VHD on your desktop or laptop, then from the boot menu, select to boot that VHD or boot the operating system. I’ve been doing this at home and work for awhile now and love it.
VHD’s also enable you to have a x32 O/S boot and a x64 O/S boot on the same machine. Possibilities are endless.
When you’re done with the VHD, just delete it and make a new one.
VHD’s sport great performance. If you use the fixed size VHD, the total performance cost is 3%. When I boot a VHD on my laptop I don’t see any drop in performance from booting the original O/S.
VHD’s do not require Hyper-V to boot them. Server 2008 R2 does have a Hyper-V feature that allows you to log onto a VHD. But what I’m explaining here does not require Hyper-V. This is why I love this feature, it just works.
Recommendations
Before creating a new VHD, defrag the volume you want to add the VHD to.
I always create a fixed size VHD to ensure maximum performance. Dynamic sized VHD’s offer flexibility with respect to size but pay a performance hit.
I’ve been allocating 45GB for all my VHDs. This leaves plenty of room for Windows 7, Visual Studio, Microsoft Office and other applications and data on the VHD. After you have created and configured a few of these, you’ll determine what works best for you.
I created a c:\vhd folder and locate all my VHD files here.
Possible Configuration Scenarios
Computer has Windows 7 or Server 2008 R2 installed and one or more Windows 7 or Server 2008 R2 VHD’s.
Computer does not have any O/S installed, but has one or more VHD’s that can be booted. How cool is this?
Possible VHD Installation Options
Create a new VHD and install Windows 7 from a DVD or network location.
Create a new VHD and use imagex.exe to restore a .wim file to the VHD. This is my favorite. This saves so much time. You install an O/S, configure it and install all the other software you need (except Visual Studio). Then use imagex.exe to save a copy of the O/S and software to a .wim file. You can then use imagex.exe to restore that .wim file to a VHD or if you need to a boot partition. I do this at work every 1-2 weeks. Takes a few minutes to pave my box. Awesome software imagex.exe is!
On my laptop and desktop systems, I keep an extra VHD file that is all ready to go. It’s configured and has all the software I need except Visual Studio. Then when I want to load up another version of Visual Studio, I copy the files I need, delete the old VHD, copy the standby VHD to another new VHD, boot the new one and install Visual Studio. Even on my laptop with the 45GB file copy and installing a new Visual Studio I’m up and running quickly.
Imagex.exe
What is imagex.exe? Read this: http://technet.microsoft.com/en-us/library/cc507842.aspx
Where can I get imagex.exe? Here: http://www.microsoft.com/downloads/details.aspx?familyid=696DD665-9F76-4177-A811-39C26D3B3B34&displaylang=en.
Read how Scott Hanselman uses imagex.exe. Great blog post! Step-By-Step: Turning a Windows 7 DVD or ISO into a Bootable VHD Virtual Machine
Links
Rather that create a new blog post with pictures, etc, I’m going to provide the links that I’ve used to be successful with VHD’s.
Scott Hanselman: Step-By-Step: Turning a Windows 7 DVD or ISO into a Bootable VHD Virtual Machine
Microsoft TechNet: Windows 7 Boot from VHD. This is actually the home page for a 3 part series on VHD files. Very well written and covers the scenarios I’ve listed above.
Microsoft Evangelist Keith Combs:
Video: Dual Boot from VHD with Windows 7 and Windows Sever 2008 R2
Article: Dual Boot from VHD Using Windows 7 and Windows Server 2008 R2
Close
I hope you find this information informative and useful.
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in Did You Know, VB.NET, Visual Studio 2010, Windows 7
I contacted JB Evain the author of Mono.Cecil and determined that Mono.Cecil is licensed under the MIT X11 License and not the Creative Commons license I thought it was. Many thanks to JB for clearing this up for me and for his Mono.Cecil work.
I have updated the XAML Power Toys installer to reflect the new license.
If you have downloaded XAML Power Toys already, you do not need to re-download since the MIT X11 license is even less restrictive than the Creative Commons license I thought I had to use.
Sorry for any confusion, this is my first license agreement I had to post.
The new MIT X11 License now reads:
License Agreement
Copyright (c) 2009 Little Richie Software
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in XAML Power Toys
If you have more than one monitor, keep reading.
When you open Sunday Night Football to view using the new Silverlight player, go full screen and then start using your other monitor to work, Silverlight immediately goes back to the smaller size. Bummer.
It’s actually a security feature, which is good.
Workaround
1. Open Sunday Night Football on your second monitor.
2. Press CTRL + N. This will open a new browser window that you can do what you want size wise.
3. Close the original browser.
4. Now use your browser zoom feature and zoom the screen the way you want. The scrollbar allows you to position the screen as desired.
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in Did You Know, Tips
It’s here and posted at: http://karlshifflett.wordpress.com/xaml-power-toys/
Please read the Known Issue, New Installation and Upgrading sections in the above page.
Five New 1280 x 1024 videos too.
New Features and Changes in v5.0
- x32 and x64 support.
- Creation of Silverlight 3 DataForm from a selected class.
- ViewModel creation now allows optionally re-implementing Model properties on the ViewModel.
- Moved XAML Power Toys saved settings file out of the “\Program Files\Little Richie Software\XAML Power Toys” folder to “\Program Data\Little Richie Software\XAML Power Toys” folder.
- Visual Studio “Add-in\Macro Security” entry no longer required.
- Removed XAML Power Toys Solution Explorer context menus. All features are now accessed from either a code window or the XAML Editor.
- Fixed the installer program to simply installing and uninstalling XAML Power Toys. Version 5 no longer requires any additional steps for a clean install or uninstall.
- Completely rewrote the secondary application domain loading code from scratch.
- Verified XAML Power Toys has no side by side issues with DevExpress.
- Added license agreement MIT X11 License. This was done for two reasons:
- I’m now using Mono.Cecil for assembly reflection and it’s licensed using the above license.
- Many corporate developers have a requirement that all software they install and use must have a license agreement. I’ve added it so corporate customers can now use XAML Power Toys in their organizations.
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in CodeProject, Silverlight, VB.NET, Visual Studio 2008, WPF General, XAML Power Toys
My blog has been very quiet the last month because I’ve been working very long hours in preparation for the next release of Visual Studio 2010. On the weekends I was relaxing and not doing much with my computer.
I’ve been all cranked up at home the last week, back to my 2:00am working sessions.
I’m sitting at FireStarter in Redmond now and will be presenting XAML Power Toys v5 at 3:45pm PST.
You can watch FireStarter live, right now at:
http://mindseyepdx.com/microsoft/firestarter/test/index2.html
I’ve added every feature that was requested on my blog and email. This includes but is not limited to:
- Support for Silverlight DataForm Control
- DataForm creation from RIA Services data model
- x64 support
- ViewModel creation, re-implement one or more model properties on the ViewModel
- Completely rewritten assembly loading code, no more load failures!
- Full compatibility with DevExpress tools.
- Settings file moved out of Program Files folder to the APPDATA folder.
I have tested the new version with complex multi-project solutions and it is sweet.
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in Demonstrations, M-V-VM, MVVM, Presentations, Silverlight, VB.NET, Visual Studio 2008, WPF General, XAML Power Toys
My blog has been very quiet the last month because I’ve been working very long hours in preparation for the next release of Visual Studio 2010. On the weekends I was relaxing and not doing much with my computer.
I’ve been all cranked up at home the last week, back to my 2:00am working sessions.
I’m sitting at FireStarter in Redmond now and will be presenting XAML Power Toys v5 at 3:45pm PST.
You can watch FireStarter live, right now at:
http://mindseyepdx.com/microsoft/firestarter/test/index2.html
I’ve added every feature that was requested on my blog and email. This includes but is not limited to:
- Support for Silverlight DataForm Control
- DataForm creation from RIA Services data model
- x64 support
- ViewModel creation, re-implement one or more model properties on the ViewModel
- Completely rewritten assembly loading code, no more load failures!
- Full compatibility with DevExpress tools.
- Settings file moved out of Program Files folder to the APPDATA folder.
I have tested the new version with complex multi-project solutions and it is sweet.
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in Demonstrations, M-V-VM, MVVM, Presentations, Silverlight, VB.NET, Visual Studio 2008, WPF General, XAML Power Toys
My great friend Rob Zelt and President of INETA emailed me about their coding contest that has fantastic prizes for the top 10 winners. 1st and 2nd place get full scholarship to PDC 2009.
Full details can be read here: http://www.ineta.org/codechallenge/
Submission deadline is 8/25/2009.
FYI: contest focus is on building applications with 3rd party controls. You are allowed to write you application using the demo version of the vendor’s controls.
Go for it!
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in VB.NET, Visual Studio 2008, WPF Controls, WPF General
On 17 September you have a wonderful and free opportunity to kick-start your Silverlight and Blend 3 skills.
I’ve started writing Silverlight 3 applications and love where this platform currently is and where it’s heading.
Come join us in Redmond or watch online this exciting day of practical learning that you can apply immediately.
Event Overview (copied from the registration page)
This summer’s biggest blockbuster technology event is coming to Redmond, WA on the 17th of September.
Register to attend the Silverlight-3 FireStarter event on Thursday, the 17th of September.
We have a stellar speaker line up from the Microsoft roster. We will have Scott Guthrie keynote the event followed by presentations from Tim Heuer, Brad Abrams, Karl Shifflett and others.
At this event we will focus on three areas:
- What’s latest and greatest in with the latest release of Silverlight
- What’s happening in the world of Expression 3
- Give you a run down on .NET RIA Services, Toolkit, etc.
Registration
Register to attend in person (Microsoft Campus Redmond, WA).
Schedule
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in CodeProject, Expression Blend, Presentations, Silverlight, VB.NET, XAML Power Toys
Note: I updated this blog entry because the first method ran into problem with StackFrames in release builds without .pbd files. I did find a JIT Compiler workaround but would never suggest such a hack.
I have so much to share with you since my last blog entry.
Went on a cruise to Alaska to write BBQ Shack and Ocean v2 Code Name: Glacier. Only got off the ship once because I was having way too much fun programming! OK, I need an intervention, let’s move past the cruise bit. Looking to go out again in September, need another week with whales, glaciers, seals, bald eagles, room service and my computer.
BBQ Shack is an end to end WPF & Silverlight Line of Business application that I’ll be using for a few months to write many Code Project articles and create tutorial videos. The new Ocean API feature set is insane!
Since I got back from the cruise, I have been pair programing with Rock Stars Rob Zelt, Laurent Bugnion, Josh Smith and Glenn Block. There is nothing like pair programming. If you have not tried this, schedule it today and get your “Geek-On.”
BBQ Shack is almost ready for release but I felt the need to take a day and do what I did on the cruise. Think, think, dream, think and question everything. Be willing to look critically at my code, motivations, assumptions and the horizon.
So kdawg02 (my Twitter call sign), what did you do Saturday and 1/2 of Sunday that prompted you to fire off a blog post?
One item I’ve been hearing about is the Code Smell of having to put property names in the call to the method that raises the property changed event for Model and ViewModel classes.
Typical de facto Standard WPF or Silverlight Property
''' <summary> ''' No ma, that's not my dirty socks, its my setter stinking up the code again. ''' </summary> Public Property TestMeString() As String Get Return _strTestMeString End Get Set(ByVal Value As String) _strTestMeString = Value OnPropertyChanged("TestMeString") End Set End Property
Developers have long not like having quoted strings in their code. Some would agree this practice is a bonafided Code Smell.
I have not minded this smell because I always generate my entity classes so I never really cared. If a property needs to change for some reason, I just regenerate my entity code.
One easy solution I’ve considered is to define a private constant for each property name and then simply use the constant. More work, but does make the code cleaner.
But What if You Could Write Properties Like This?
''' <summary> ''' Look Ma, no code smell in my setter! ''' </summary> Public Property TestMeGetCurrentMethodName() As String Get Return _strTestMeGetCurrentMethodName End Get Set(ByVal Value As String) _strTestMeGetCurrentMethodName = Value OnPropertyChanged(MethodBase.GetCurrentMethod.Name.Remove(0, 4)) End Set End Property
Well, you can!
The System.Reflection.MethodBase.GetCurrentMethod call gives us access to a wealth of information at runtime, including the name of the currently running method. In our case the property setter.
The name of this property setter is, “set_TestMeGetCurrentMethodName.” So by removing the first four characters the current property name is passed to the base classes OnPropertyChanged event handler.
Kind of anti-climatic isn’t it…
What is Performance Hit?
Below are 11 runs each doing 100 more iterations than the previous run.
The first result is the OnPropertyChanged(“TestMeString”) method.
The second result is the OnPropertyChanged(MethodBase.GetCurrentMethod.Name.Remove(0,4)) method.
The run is a release build, without any .pdb files, running from the command line. I added some string manipulation code in the PropertyChangedEvent handler to simulate actual real world code that actually does some processing in the event handler.
When looking at the results the double quoted string method runs faster.
But, do you really care about .4 milliseconds on 100 property changed events as in the second iteration? Most WPF and Silverlight applications I’ve seen only raise one or two property changed events at a time.
Note: If you have an application that has 100’s of events per second or more like real-time graphing applicaitons, I would not use this method for performance reasons. Instead, go with string constants for the property names or double quoted strings if you like that better.
Where Are We
Want to thank the WPF Disciples who commented heavily and showed me holes in my first attempt.
I did receive a comment from Tamir Khason that he categorized as a gut feeling rather than known fact but am including it here for completeness, “There could be issues with reliability of reflection for production environment where assemblies can be obfuscated, delayed signed etc.” Thanks for the heads up Tamir!
I’ve re-posted this blog entry to gain developer interest in finding a solid solution to this “Code Smell” issue without any external dependencies or Dependency Properties.
Other Solutions
Neil Mosafi’s (Be sure to read the comments on this blog post)
Peter O’Hanlon would like to see
public string Name
{
get; [Notify]set;
}
Download
After downloading you must change the file extension from .doc to .zip. This is a requirement of WordPress.com
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in CodeProject, Data Binding, M-V-VM, MVVM, Silverlight, Tips, VB.NET, Visual Studio 2008, Visual Studio 2010, WPF General
Chicago WPF LOB Tour attendees, thank you very much for sharing two wonderful days with Jaime and myself. It was a real pleasure meeting you and diving into WPF together. Wish you all great success in your careers.
Downloads
Note: The Code and Demos have been updated with new content. Developers who attended a previous tour, may want to get the latest slides, code and demos.
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in M-V-VM, MVVM, Presentations, VB.NET, WPF General
Above is a kiosk full screen capture. Button panel is floating on top of the WebBrowser control.
Introduction
We had just finished the Chicago WPF for Line of Business Training Tour and were having refreshments during which, the conversation somehow turned to the question, “how can I float buttons on top of the WebBrowser control?
It is a well know fact that WPF cannot render UIElements on top of the WebBrowser control. (see WPF Interoperation: Airspace and Window Regions Overview)
The developer I was speaking to had a WPF kiosk application that ran a combination of HTML and 3rd party Flash animations. Since their application ran in a kiosk with smaller screens, they needed to be able to float WPF Button controls on top of the WebBrowser control as opposed to giving up some space on one of the edges for their buttons.
Karl being Karl, jump in with both feet and stated with authority, “of course you can do that.” (Now I had to man-up and figure this out!)
After a few hours of developers talking shop, I headed up to the hotel room and wrote this application.
Application
The application consists of a single border-less, maximized Window. The WebBrowser controls stretches to automatically consume all available screen space.
The below Button bar is a Border control that wraps the four buttons. The buttons are all bound to commands that automatically take care of enabling and disabling the buttons.
Notice that the Border is transparent The blue border is just to show the outline for this article. You can easily modify the layout of the Border’s contents.
You can also see when the application first loads, the Back and Forward buttons are disabled. After the user navigates, the buttons will be enabled and disabled just like your Internet browsers are. The Home button will take you to my blog, the Exit button will close the application.
<Grid> <WebBrowser x:Name="wbBrowser" /> <Popup x:Name="puOverlay" AllowsTransparency="True" Placement="Bottom" PlacementTarget="{Binding ElementName=wbBrowser}"> <Border x:Name="bdrOverLay" CornerRadius="30" BorderBrush="Blue" Background="#1F000000" Padding="7" BorderThickness="2"> <StackPanel Orientation="Horizontal"> <StackPanel.Resources> <Style TargetType="{x:Type Button}"> <Setter Property="Width" Value="75" /> <Setter Property="Margin" Value="3.5" /> <Setter Property="VerticalAlignment" Value="Center" /> <Setter Property="HorizontalAlignment" Value="Center" /> </Style> </StackPanel.Resources> <Button Command="NavigationCommands.BrowseBack" Content="Back" /> <Button Command="NavigationCommands.BrowseForward" Content="Forward" /> <Button Command="NavigationCommands.BrowseHome" Content="Home" /> <Button Command="ApplicationCommands.Close" Content="Exit" /> </StackPanel> </Border> </Popup> </Grid>
The above XAML shows the WebBrowser and a single Popup control. The Popup control will render on top of the WebBrowser control because it displays in its own Window. Using some simple positioning code in the Window Loaded event, positions the Button bar centered at the bottom. You can position the Button bar anywhere.
This application allows the kiosk user to interact with the web page and the Button bar using touch screen technology without giving up screen space along one of the edges.
Special Note
To the developers I was speaking to at the watering hole that night, I hope this meets your application requirements.
Download
After downloading you must change the file extension from .doc to .zip. This is a requirement of WordPress.com
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in Did You Know, VB.NET, WPF General
This is the next sample in the WPF Sample Applications Series. The purpose of the Sample Series is to provide concise code solutions for specific programming tasks. This sample provides a brief description of the problem, the solution and full source code.
Introduction
These past few months I’ve been privileged to be a part of the WPF for Line of Business Training Tour. What I really love is to be around developers excited about the WPF platform. At each city I got requests from attendees to show them how to accomplish a task in WPF. During a break I would sit down and write the code and usually I add the code to the session downloads.
This sample is the result of the question, “how can I do multi-level grouping?”
Application
All regions have been collapsed. Count of Account Mangers is displayed along with the sales in dollars.
The West region has been expanded along with the child states. Notice the state grouping level has totals for its state. Account Manages have their name and sales figure displayed.
Application Requirements
- Grouping levels must be collapsible
- Display total sales for Account Managers in the level
- Display count of Account Managers in the level
- Display the familiar “+” and “-” icon for expanding and collapsing levels
- Sort data by region, state and sales descending
Grouping and Sorting
<CollectionViewSource Source="{x:Static local:Data.AccountManagers}" x:Key="cvs"> <CollectionViewSource.SortDescriptions> <scm:SortDescription PropertyName="Region" /> <scm:SortDescription PropertyName="State" /> <scm:SortDescription PropertyName="Sales" Direction="Descending" /> </CollectionViewSource.SortDescriptions> <CollectionViewSource.GroupDescriptions> <PropertyGroupDescription PropertyName="Region" /> <PropertyGroupDescription PropertyName="State" /> </CollectionViewSource.GroupDescriptions> </CollectionViewSource>
WPF provides the CollectionViewSource for codeless sorting and grouping of data. The SortDescriptions and GroupDescriptions collections can be modified at runtime if desired. The SortDescription provides the ability to set the sort direction as I’ve done for the Sales.
The ListBox consumes the CollectionViewSource data by assigning the ListBox.ItemsSource property to the CollectionViewSource resource.
Note: I’ve assigned the Source to a static property so that I can have design time data and rending of the ListBox during development.
ListBox.GroupStyle
The ListBox.GroupStyle does all the heaving lifting for rendering the group level headers. You have several options when working with GroupStyles.
- Define a GroupStyle.HeaderTemplate
- Define a GroupStyle.ContainerStyle
- Use a HeaderTemplateSelector to select the HeaderTemplate at runtime
- Use a ContainerStyleSelector to select the ContainerStyle at runtime
For this application, I’ve chosen to define a ContainerStyle in XAML.
When defining a ContainerStyle, we will re-template the GroupItem that gets created for each level of grouping.
The purpose of re-templating the GroupItem is so that we have full control over how level is rendered.
<ListBox.GroupStyle> <GroupStyle> <GroupStyle.ContainerStyle> <Style TargetType="{x:Type GroupItem}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type GroupItem}"> <ControlTemplate.Triggers> <DataTrigger Binding="{Binding Path=IsBottomLevel}" Value="True"> <Setter TargetName="gridTemplate" Property="Grid.Background" Value="#FF965F00" /> </DataTrigger> </ControlTemplate.Triggers> <Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Grid Background="Black" x:Name="gridTemplate" Height="26" VerticalAlignment="Center"> <Grid.Resources> <Style TargetType="{x:Type TextBlock}"> <Setter Property="FontSize" Value="14" /> <Setter Property="Foreground" Value="White" /> <Setter Property="VerticalAlignment" Value="Center" /> </Style> </Grid.Resources> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="45" /> <ColumnDefinition Width="30" /> <ColumnDefinition Width="110" /> </Grid.ColumnDefinitions> <ToggleButton x:Name="btnShowHide" IsChecked="True" Margin="3.5" /> <TextBlock Grid.Column="1" Text="{Binding Path=Name}" Margin="3.5,0" /> <TextBlock Grid.Column="2" Text="Count:" /> <TextBlock Grid.Column="3" Text="{Binding Path=ItemCount}" TextAlignment="Right" Margin="0,0,11,0" /> <TextBlock Grid.Column="4" Text="{Binding StringFormat=\{0:C\}, Converter={StaticResource groupItemSalesSubtotalConverter}}" TextAlignment="Right" /> </Grid> <ItemsPresenter Visibility="{Binding ElementName=btnShowHide, Path=IsChecked, Converter={StaticResource booleanToVisibilityConverter}}" Grid.Row="1" Margin="11,0,0,3.5" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> </GroupStyle.ContainerStyle> </GroupStyle> </ListBox.GroupStyle>
The DataContext for a GroupItem is a CollectionViewGroup.
In this ControlTemplate we will bind to the following properties of the CollectionViewGroup:
- IsBottom – used by DataTrigger to set level heading Background
- Name – used to display the level’s heading text
- ItemCount – used to display the number of members in this level
Collapsible Group Levels
The ToggleButton has been re-templated to display an image that indicates the state of the Button. (see download for template)
The ItemsPresenter at the bottom of the template is where the data items will be rendered.
Using the built-in BooleanToVisibilityConvert and binding the ItemsPresenter.Visibility property to the ToggleButton.IsChecked property, we get simple, codeless collapse and expand behavior of the data members.
You really have to admire the sheer power of WPF here.
Subtotals
The last TextBlock Text property has a strange Binding. There is no path. When the converter is called, the DataContext will be passed as the value to the converter. In this code the CollectionViewGroup will be passed to the converter.
Imports System.Windows.Data <ValueConversion(GetType(CollectionViewGroup), GetType(Double))> _ Public Class GroupItemSalesSubtotalConverter Implements IValueConverter Public Function Convert( _ ByVal value As Object, ByVal targetType As System.Type, _ ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) _ As Object Implements System.Windows.Data.IValueConverter.Convert If value IsNot Nothing AndAlso TypeOf value Is CollectionViewGroup Then Return GetSubTotal(DirectCast(value, CollectionViewGroup)) Else Return Nothing End If End Function Private Function GetSubTotal(ByVal obj As CollectionViewGroup) As Double Dim dbl As Double For Each objItem As Object In obj.Items If TypeOf objItem Is AccountManager Then dbl += DirectCast(objItem, AccountManager).Sales Else dbl += GetSubTotal(objItem) End If Next Return dbl End Function Public Function ConvertBack( _ ByVal value As Object, ByVal targetType As System.Type, _ ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) _ As Object Implements System.Windows.Data.IValueConverter.ConvertBack Throw New NotImplementedException End Function End Class
This converter uses recursion to drill down to each member of the level and calculate a sales subtotal.
ListBox.ItemTemplate
<ListBox.ItemTemplate> <DataTemplate> <DockPanel> <TextBlock DockPanel.Dock="Right" HorizontalAlignment="Right" Text="{Binding Path=Sales, StringFormat=C}" /> <TextBlock Text="{Binding Path=FullName}" /> </DockPanel> </DataTemplate> </ListBox.ItemTemplate>
The ListBox.ItemTemplate is used when rendering the AccountManager data items. A DockPanel provides the required layout. The TextBlocks are data bound to properties on the AccountManager class.
Download
After downloading you must change the file extension from .doc to .zip. This is a requirement of WordPress.com
Hope you can learn a little more about WPF from this article and the Sample Series.
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in Samples, VB.NET, WPF Controls, WPF General
Phoenix developers, thank you so very much for your hospitality and a wonderful time in your city. Big time hats off to the Sheraton Four Points Phoenix North hotel too. They gave us all 5 Star service.
Big thanks to Tim Heuer for organizing the Hawaiian shirt day on Friday! Picture can be viewed here.
Downloads
Note: The Code and Demos have been updated with new content. Developers who attended a previous tour, may want to get the latest slides, code and demos.
Looking forward to Chicago this Friday.
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in Data Binding, Demonstrations, M-V-VM, MVVM, VB.NET, WPF Controls, WPF General
Introduction
After my previous blog post, “Troubleshoot Silverlight 3 Data Bindings” I got some feedback and while in Phoenix I upgraded the code and have decided to call this Glimpse.
This initial release of Glimpse is a proof of concept project. As I spend more time working with Silverlight 3, I’ll add more instrumentation views (Mole for Silverlight anyone?)
What is cool about Glimpse is that it can be used for local debug or deployed release builds. It takes a single line of code to crank it up.
BTW: I have not had a chance to make the UI pretty in Blend yet. So go easy on Karl’s Moletones UI.
Glimpse Viewer Control
The Glimpse Viewer Control is hosted inside a Floatable Window. Tim Heuer has a great post on how he modifed the default Silverlight ChildWindow so that it can be modal or non-modal.
I took Tim’s implementation and added the ability to set the location of the Floatable Window. My code is in the Download section below.
Launching Glimpse
Glimpse is launched with a single line of code, passing the Application object and a string name for the Silverlight control. If you have more that one Silverlight control on a web page, the name helps to know what control that Glimpse is providing information for.
In the above code, I’m testing if the current build is a DEBUG build. If so, launch Glimpse. In your applications you can use other techniques for determining if Glimpse should be launched.
If your MainPage object throws an exception during object construction, Glimpse will display an Exception Viewer that will show you the exception and any inner exceptions.
To demonstrate this feature, you can uncomment the code in the MainPage constructor and then run the demo application.
Load Exception Viewer
The above code has outer and inner exceptions. This viewer will display the outer exception and all nested inner exceptions.
Application Unhandled Exceptions
When your Silverlight application has an application unhandled exception, the Glimpse Viewer Control will display a red ellipse on the right with a number indicating the number of unhandled exceptions.
- Click the Expand button to display the Glimpse Viewer information
- To return to contracted mode, click the Contract button
- To clear the list of exceptions, click the Clear Exceptions button
Data Binding Exceptions
When your Silverlight application has an binding validation exception, the Glimpse Viewer Control will display a red ellipse on the left with a number indicating the number of exceptions.
In the below image, the Birthday field has text that can’t be converted into a date.
Pressing the Expand button displays the data binding validation exception. This will also show any inner exceptions if they are present.
Notice the (Added) text on the left and field on the right. This is the ValidationErrorEventAction property for the ValidationError. When the validation error is cleared, the text will display “(Removed)”.
Bindings with no Source
The below image shows the Path with a typo, an “x” has been added to the correct property name “FirstName”. This will cause a binding failure.
The below viewer provide information on all broken bindings in the host Silverlight control. Binding errors are resolved each time the “Bindings with no Source” tab is selected.
From Here
I have two projects that I want to launch on my blog, then I’ll take any feedback and add more views to the Glimpse Viewer Control.
What is nice about this approach is that you can launch Glimpse on a deployed production Silverlight control that needs some debugging love on a remote server in addition to using it during Silverlight control development.
Downloads
After downloading the below project, you must change the file extension from .doc to .zip, this is a requirement of WordPress.com.
Glimpse Control and Demo Project (61KB)
Karl’s Floatable Window (22KB)
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in CodeProject, Data Binding, Exceptions, Silverlight, VB.NET
This post has been replaced by a much better approach.
Please view Glimpse for Silverlight – Viewing Exceptions and Binding Errors
Have a great day,
Just a grain of sand on the worlds beaches.
Posted in Data Binding, Exceptions, Silverlight, VB.NET








