Windows Phone 7 Notification Service Updates

Windows Phone 7 Notification Service Updates

There are some changes that you need to make if you want Windows Phone 7 notifications to work with the April refresh of the developer tools (from readme):

Update Publisher

You need to specify a publisher in the WMAppManifest.xml file. Default value is “”. Can be anything, so long as it’s not empty (or missing)

<?xml version="1.0" encoding="utf-8"?> 

<Deployment  
            AppPlatformVersion="7.0"> 
  <App  ProductID="{b2a3afee-70be-40c7-8dc1-81ac8c14163e}" 
          Title="Notifications" RuntimeType="SilverLight" 
          Version="1.0.0.0"  Genre="NormalApp"  
          Author="Nick Randolph" Description="Notification App"  
          Publisher="BuiltToRoam">

Toast Notification Format

Format of the message has changed from:

var messageTemplate = "Content-Type: text/xmlrn" +
"X-WindowsPhone-Target: toastrnrn" +
"<?xml version="1.0" encoding="utf-8" ?>" +
"<wp:PushNotification id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:f998bcd1-3b66-4943-b517-0d7340352589" class="wlWriterEditableSmartContent">

var messageTemplate = "Content-Type: text/xmlrn" +
"X-WindowsPhone-Target: toastrnrn" +
"<?xml version="1.0" encoding="utf-8"?>" +
"<wp:Notification id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:15f1c293-d2ec-4d7d-9441-c71f25eb77a0" class="wlWriterEditableSmartContent">

var messageTemplate = "Content-Type: text/xmlrn" +
"X-WindowsPhone-Target: tilernrn" +
"<?xml version="1.0" encoding="utf-8" ?>" +
"<wp:PushNotification id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:910c0ac2-500e-485e-abd3-3069c9e6985d" class="wlWriterEditableSmartContent">

var messageTemplate = "X-WindowsPhone-Target: tokenrnrn" +
"<?xml version="1.0" encoding="utf-8"?>" +
"<wp:Notification >this post which covers how to pin your application to the Start area.

image

A last comment:

If you are wondering why your notifications are not being received on the emulator you may also see the following exception in the debugger output window:

A first chance exception of type 'System.Collections.Generic.KeyNotFoundException' occurred in mscorlib.dll

This usually happens if the notification message you are trying to send is corrupt or ill formed (I’m not sure of the exact cause). At the moment the only way I’ve found to recover from this exception is to reboot the emulator. If you attempt to restart the application you will simply continue to see this exception for every notification you try to send.

Windows Phone 7 Application Tiles

Windows Phone 7 Application Tiles

With the April update of the Windows Phone 7 developer tools, which adds compatibility with Visual Studio 2010, you also get an update to the Windows Phone 7 emulator. One of the things that was missing in the previous build was the ability to pin your application to the Start. In this build you can go to the application list (click the right arrow from the Start), tap and hold on the application you want to pin to Start. This will display a drop down list of actions, including “pin to start”, select this item and return to Start to see your application.

 image

If you want to remove your application from Start, you need to tap and hold on the application on the Start. You will notice a little pin with a line through it appear on your application. Tapping the pin will remove the application from the Start. Note that the pin is a change in this build from the little broken heart that we saw in the previous build.

You can also check out the unlocked emulator image to see a few more of the updates in this build. Note that you can actually replace the emulator image installed with the Windows Phone 7 developer bits (ie C:Program FilesMicrosoft SDKsWindowsPhonev7.0EmulationImageswm70C1.bin) as the new unlocked image supports debugging from within Visual Studio 2010/Blend. I would take a copy of the official rom image just to be safe!

Upgrading Windows Phone 7 Projects to April CTP

Upgrading Windows Phone 7 Projects to April CTP

If you open a Windows Phone 7 project that was created with the initial release of the developer tools you will see a prompt similar to:

image

Essentially one of the updates in the April CTP is related to the enforcement of security policies for applications that want to make use of device capabilities. I’m expecting that this will be integrated into the Marketplace experience so that users who download your application will have to acknowledge that the application will have access to capabilities on the device.

Anyhow, to get your application to run, you may need to add the appropriate capabilities, as instructed in the warning message. From the previous release of the dev tools, your WMAppManifest.xml file (located under the Properties node of your Windows Phone 7 project) probably looks similar to the following:

<Deployment >http://schemas.microsoft.com/windowsphone/2009/deployment" AppPlatformVersion="7.0">
  <App >http://schemas.microsoft.com/windowsphone/2009/deployment" AppPlatformVersion="7.0">
  <App >Jaime Rodriguez has a good post on Windows Phone 7 capabilities security model

Using Uri Fragments with Windows Phone 7 instead of QueryString

Using Uri Fragments with Windows Phone 7 instead of QueryString

There are a number of posts out there (such as this one) talking about the use of QueryString parameters as a way of passing information between pages in a Windows Phone 7 application. An alternative to this is the use of Uri Fragments.

I’ll take Rongchaua’s example as a starting point. Here you can see the code on both the source and destination pages.

// On source page
NavigationService.Navigate(new Uri("/BrowsePage.xaml?RSSSource="+strSource, UriKind.Relative));

// On destination page
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
    try
    {
        …
            string strRSSSource = "";
            NavigationContext.QueryString.TryGetValue("RSSSource", out strRSSSource);
        …
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

Before we go on to look at using fragments instead of the query string, I’ll make one comment about this code sample. Here Rongchaua has handled the Loaded event of the page. If you want to load data you can actually override the OnNavigatedTo method which will get invoked earlier in the navigation pipeline. You do need to be careful though as the UI may not have been completely loaded at that point.

Coming back to using a uri fragment. Here is the same example, this time using a fragment instead of a QueryString.

// On source page
NavigationService.Navigate(new Uri("/BrowsePage.xaml#"+strSource, UriKind.Relative));

// On destination page
protected override void OnFragmentNavigation(System.Windows.Navigation.FragmentNavigationEventArgs e)
{
    try
    {
        …
            string strRSSSource = e.Fragment;
        …
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

The OnFragmentNavigation method gets invoked after the page has been navigated to but before the loaded event is raised. It’s there so that you can process the fragment that has been sent through to your page. Of course, it’s suited to cases where you only want to pass through a single value.

Windows Phone Calculator – Design Success or Failure?

Windows Phone Calculator – Design Success or Failure?

I was just trying out a couple of things on the Windows Phone emulator and came across some hidden features of the calculator application. Having started the calculator and I did a basic sum and thought, great it’s a very basic, clean looking, calculator.

image

Then I accidentally hit the rotate button on the emulator and wow, there’s some hidden buttons that weren’t available in portrait mode.

 image

How on earth was the user supposed to find those buttons? I went back to portrait mode and looked for visual clues to indicate that there were some hidden buttons or that I should rotate the device. Nothing….

My question is does this constitute good Windows Phone application design? I suspect my answer is that it’s not finished and that there is some refinements still to be added. Whilst visually appealing the lack of any visual clues is a complete fail. Hopefully we’ll see this addressed before Windows Phone ships.

Don’t create Easter Eggs in your application, make sure there are some clues to allow the user to explore your application and locate all the functionality you painstakingly added to your application.

Messagebox.Show Breaks Dispatcher.BeginInvoke after DataServicesQuery on Windows Phone 7

Messagebox.Show Breaks Dispatcher.BeginInvoke after DataServicesQuery on Windows Phone 7

I’m guessing this is an issue with the current CTP of the Windows Phone 7 bits, or perhaps just an emulator issue, but it appears that if you call MessageBox.Show it throws a spanner in the works when you try to do a UI update from a background thread.

Take for example if you were to follow Alex’s post on Accessing WCF Services then you would be calling BeginExecute on a DataServiceQuery. As you would imagine this goes off and does an asynchronous call. When the call is complete the callback method (in our case an anonymous method) is invoked. In the following sample code all the call back does is to call Dispatcher.BeginInvoke to execute a method that will refresh the UI.

In the following code, SimpleUpdate is never executed.

        ServiceEntities context;

        void SimpleUpdate()
        {
            this.button.Content = "Updated Text";
        }

        private void button_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Hi Everyone!");

            context = new ServiceEntities(new Uri(http://myserver/Services/myservice.svc/));

            var query = context.Customers;
            query.BeginExecute(
                       (asyncResult)=> {
                             this.Dispatcher.BeginInvoke(SimpleUpdate);

                                                 },  query);

        }

If we remove the MessageBox.Show line, the code executes without an issue and SimpleUpdate is called and the button text is updated.

In my case I came across this because I was using the MessageBox for debugging. In a real world Windows Phone application you really need to reconsider the use of MessageBox at all – it’s generally a symptom that something hasn’t been designed well or that something has gone wrong (eg exception thrown).

Windows Mobile 6.5 + Exchange 2010 + Outlook 2010 = Desktop SMS Messaging

Windows Mobile 6.5 + Exchange 2010 + Outlook 2010 = Desktop SMS Messaging

This is awesome! My Exchange account over at www.myhostedsolution.com has been migrated to their new Exchange 2010 hosting servers. This means that I can finally do SMS synchronisation between my mobile, running Windows Mobile 6.5, and my Inbox. Better still, with Outlook 2010 I can both view and reply to SMS messages from within Outlook. All of this without having to configure any additional settings or services.

Here are the few steps you have to do.

  1. Upgrade your Exchange account to Exchange 2010. If you set up hosting with www.myhostedsolution.com you get this included in you subscription for free by default. Did I mention they have unlimited storage so is awesome value.
  2. Go into ActiveSync on your Windows Mobile 6.5 device and enable synchronization of Text Messages. This should enable synchronization of your text messages with your Exchange 2010 server. When I first upgraded to Exchange 2010 the option to synchronize text messages didn’t appear in ActiveSync on my device so I ended up wiping the device and setting up the account again.
    image
  3. The next piece is to install or upgrade to Outlook 2010. This sports a much newer interface, including the ability to send SMS messages. After installing and configuring your account (or if you’re upgrading, after your data file has been upgraded) you should see an email from Outlook 2010 entitled “Send and receive text messages on your computer!” which indicates that your mobile device is synchronizing text messages and Outlook is ready to send messages.

Sending Text Messages from Outlook 2010

From the New Items drop down select Text Message (SMS)
image

This will open the Text Message window where you can enter your message. Note the list of emoticons in the ribbon.

image

Once you’ve written your message, hit Send. When your device next synchronizes you should see a notification that your SMS message has been sent. That’s right, Outlook 2010 synchronizes the message to be sent to Exchange 2010, which then synchronizes it to your mobile device, which then sends it using your mobile phone account. No additional services necessary!

image

If you get an SMS Message it will be synchronized to Exchange 2010, then on to Outlook 2010, appearing in your Inbox along with your email. Careful if you’re working for an organisation that monitors email as your text messages will now be accessible to your Exchange administrators.

image

You can of course reply to an SMS and it will be sent out again via Exchange, Outlook…. your device. You do need to make sure your device is synchronizing, otherwise your SMS messages won’t be sent.

Don’t Install Web Deployment Tool using the Web Platform Installer

Don’t Install Web Deployment Tool using the Web Platform Installer

After a bit of time wondering why I couldn’t just hit Publish on my web application within Visual Studio 2010 and have it deployed using the new Web Deployment Tool I tracked it down to some missing bits. I’d just gone through the process of building a new development server and as part of setting up the services I need I used the Web Platform Installer. What I wanted to do was configure the server so that when I create a new web project on my development machine using VS2010 I could then use Publish from within VS to deploy it to my development server. Having read through a couple of blog posts on how to do this I figured it can’t be that difficult since most of them say “install the Web Deployment Tool using the Web Platform Installer” and then Publish away. Well it isn’t that easy basically because the platform installer only installs half the bits.

Installing WebDeploy and Management Service

Ok, so lets start with the bits you do need to make sure you install. These are the Web Deployment Tool (of course) and the Management Service (not so obvious but kinda required if you want to remotely publish your applications to IIS).

image image

Now the next thing to do is to go and actually install the Web Deployment Tool from the MSI. You can do this by downloading it from http://www.iis.net/download/WebDeploy. This should prompt you to change, repair or remove – select Change and install the missing components. This will give you the bits in IIS Manager to actually manage permissions and delegation so that you can remotely deploy your application.

So far you’ve been doing the default install for the Web Deployment Tool which uses port 80…. but wait, isn’t that what your website is running on? If it is, then you need to customise your install, for example:

msiexec /i <msi_filename> /passive ADDLOCAL=ALL LISTENURL=http://+:8080/MSDEPLOY2/

Alternatively, if you’re like me and only building a dev server then you could always just change your web site (within IIS) to run off a different port. In my case I created a new Web Site using port 8080, which meant I just went with the defaults for webdeploy.

Remote Access

Select the Web Server node in IIS Manager followed by double-clicking the Management Service icon. Stop the Management Service from the Actions list – this will enable the Enable Remote Connections checkbox. Check the Enable Remote Connections checkbox. You can configure other options such as the port and the SSL certificate to use. You need to make sure there is an exception in the server firewall for the port used by the Management Service. By default the Management Service uses a self signed certificate – this isn’t an issue if your doing internal deployments and the clients don’t care about ensuring the integrity of the server they are communicating with. If you are exposing it out of your network you should change the certificate. Start the Management Service from the Actions pane.

image

Configure Deployment Account

The next step is to set up the Management Service for remote deployment of your web application. In my case I set up a Windows user, WebsiteDeploy, that belongs to the Administrators group. This is the user that will create the application within IIS on the server when you publish your web application.

Within IIS Manager select the Web Site you want to enable remote deployment for. Double-click the icon entitled IIS Manager Permissions in the Feature View when the Web Site is selected. From the Actions list select Allow User and enter or select the name of the user that you want to enable (in my case WebsiteDeploy).

image

Delegation

Now that you have enabled the user you need to delegate remote access to that user. You do that by selecting the web server node and double-clicking the Management Service Delegation (this icon doesn’t appear if you only use the Web Platform Installer to install the Web Deployment Tool). Select Add Rule from the Actions list and then select Deploy Applications with Content. If you only want to deploy content then you can select the Deploy Content Only option.

image

I went with the default values and that seems to work for the new rule.

image

You may need to restart the Management Service which you can do by reselecting the Web Server node in IIS Manager, select the Management Service feature and then click Restart from the Actions pane.

You should now be ready to deploy from within Visual Studio 2010. To test this capability I created a new web application, WebApplication1, based on the ASP.NET Web Application. Without making any changes to the application I right-clicked the Web Application project node in Solution Explorer and selected Publish.

image

You’ll notice that all I needed to enter for the Service URL was the ip (or machine name) of the server you are deploying too. Of course this does rely on the Management Service port (default is 8172) being open on the firewall of your server. Also, don’t for get to Allow untrusted certificates unless you configured the Management Service to use a trusted certificate.

Hope this helps you get your server set up for One-Click Publishing. Let me know if there are pieces missing that I may have overlooked.

Microsoft Silverlight Analytics Framework with Google Analytics

Microsoft Silverlight Analytics Framework with Google Analytics

Yesterday I spent a somewhat frustrating day getting familiar with the Microsoft Silverlight Analytics Framework that was announced at MIX. It was frustrating not because the framework is hard to use, in fact far from it, but because there was a small bug in the GoogleAnalytics library that prevented it working in certain timezones (I tested it in Australia, New Zealand and parts of Europe and it appeared that there were issues in most timezones outside the US). This issue has now been resolved so if you are going to work with the GoogleAnalytics library with the SL Analytics Framework, make sure you get the latest source code, rather than downloading the initial release.

Firstly, some important URLs that you may want to take a look at:

– The Microsoft Silverlight Analytics Framework (http://msaf.codeplex.com/)

– The MSAF Google Analytics page (http://msaf.codeplex.com/wikipage?title=Google%20Analytics)

– Google’s information on working with the MSAF (http://code.google.com/apis/analytics/docs/tracking/silverlightTrackingIntro.html)

Ok, now let’s get started. To demonstrate how you can do this let’s use the default Silverlight Navigation project template from Visual Studio. We’ll add Google Analytics tracking so that you can track when users go between pages.

The first thing to do is to download the latest MSAF bits. Go to the codeplex site, click on the Source Code tab and then click the Download link under the Latest Version sign. This will download a zip file, which you should expand on your machine. Within the expanded folder locate the Silverlight 3 solution file (eg msaf-45617Silverlight.3Microsoft.WebAnalyticsMicrosoft.WebAnalytics.sln) and open it in Visual Studio 2008. You will see some prompts, one for the password to a signing key (just cancel this dialog) and some relating to source control (you can permanently remove the source control bindings). Once loaded, you want to rebuild the following projects:

– Microsoft.WebAnalytics

– Microsoft.WebAnalytics.Behaviors

– Microsoft.WebAnalytics.Navigation

For each of these projects grab the generated dll and copy it to a temporary folder. We’ll be needing these later on. Also from the Assemblies folder (eg msaf-45617Silverlight.3Microsoft.WebAnalyticsAssemblies) copy out the Google.WebAnalytics assembly).

We’ll create a new Silverlight application within Visual Studio using the Silverlight Navigation Application project template.

image

Add references to the dlls you copied to the temporary folder to your Silverlight application (not the associated web project). Also add a reference to System.Windows.Interactivity.

To wire up the MSAF you can either manually write the XAML, or you can open your Silverlight application in Expression Blend. I prefer the latter as it gives you great designer support for adding behaviors to your pages.

Open up the Assets window in Expression Blend and expand out the Behaviors node. Locate the ConsoleAnalytics behavior and drag it onto the LayoutRoot node in the Objects and timeline window.

image

Do the same for the TrackAction behavior, dragging it onto the ContentFrame node.

image

With the TrackAction behavior selected, go to the Properties window and locate the Trigger window. From the EventName dropdown select the Navigated event.

image

Press F5 and run the application. Make sure that the test page is displayed, rather than default.aspx (eg http://localhost:60288/MSAFWithGoogleSampleTestPage.aspx) When it loads in Internet Explorer press F12 to show the developer tools. Select the Script tab and watch the Console window on the right as you click on the Home and About buttons on you Silverlight application.

image

You can see from the console window that the tracking event is being raised each time you navigate between the frames of this application. The output is a result of using the ConsoleAnalytics that you added to the LayoutRoot. But it’s currently not sending anything to Google Analytics. To do this, you need to add the reference to Google Analytics library…

From the Assets window open the Locations node and go to the Google.WebAnalytics node. Drag the GoogleAnalytics behavior onto the LayoutRoot node in the Objects and timeline window.

Now, you’ll need to ensure you have a Google analytics account. If not go to www.google.com/analytics and sign up for an account. Once you have an account you can go into your account and locate the Web Property ID. Go to the overview page and you should see the Web Property ID as in the following image.

image

Copy this value and paste it into the Web Property ID in the Google Analytics section of the Properties window.

image

You probably also want to specify a Category so that you can data mine the events logged with Google Analytics. You’re read to run your application, so press F5 to run it.

Download and run fiddler and you can see that there are calls out to Google Analytics each time you click on the Home or About buttons.

image 

Hopefully this will help you get up and running with Google Analytics in conjunction with the Microsoft Silverlight Analytics Framework.

Windows Phone 7: Add Reference for Syndication

Windows Phone 7: Add Reference for Syndication

In my previous post, Building an RSS Reader for Windows Phone 7, you may have wondered how I was able to reference SyndicationFeed as this class is in the System.ServiceModel.Syndication namespace which isn’t available in the default list of references for a new Windows Phone 7 project, nor is this assembly in the list of .NET assemblies when you do Add Reference.

The secret is that you need to add a reference to the desktop Silverlight v3 assembly, C:Program FilesMicrosoft SDKsSilverlightv3.0LibrariesClientSystem.ServiceModel.Syndication.dll. This will get deployed along with your application, giving you access to the Syndication namespace.

Happy RSS Reading!

Building an RSS Reader for Windows Phone 7

Building an RSS Reader for Windows Phone 7

I noticed that Sam over on the Silverlight Show posted about a Windows Phone 7 Series RSS Reader which uses the WebBrowser control to render the content. I figured that whilst that was a neat approach to displaying content an alternative would be to parse the feed, extract the content and display using a combination of TextBlock, Run and LineBreak elements. The following screenshot shows my blog being viewed using such an approach.

image 
Here’s the core code that makes this all happen. It uses the SyndicationFeed class to extract the posts – in my case I’ve just embedded the feed source as a text resource file (hence var rss = RssResources.BlogPosts, where RssResources is a reference to the designer generated wrapper). I then loop through looking for html tags, specifically end of paragraphs and images. I’m sure there’s a more elegant way of doing this but for demo purposes this did the trick.

        private void Page_Loaded(object sender, RoutedEventArgs e)
        {
            // Load RSS into a feed
            var rss = RssResources.BlogPosts;
            using(var strm = new System.IO.StringReader(rss))
            using(var reader = System.Xml.XmlReader.Create(strm))
            {
                var feed = System.ServiceModel.Syndication.SyndicationFeed.Load(reader);
                // Regular expression to look for html tags
                var tagFinder = new System.Text.RegularExpressions.Regex("<(.|n)+?>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);

                // Create the initial textblock
                var txt = new TextBlock() { TextWrapping = TextWrapping.Wrap };
                this.stackPanel1.Children.Add(txt);
                foreach (var item in feed.Items)
                {
                    // Add a title
                    txt.Inlines.Add(new Run() { FontWeight = FontWeights.Bold, Text = item.Title.Text });
                    txt.Inlines.Add(new LineBreak());
                    var itemText = item.Summary.Text;
                    var match = tagFinder.Match(itemText);
                    var startidx = 0;
                    while (match.Index >= 0 && match.Length > 0)
                    {
                        if (match.Value == "</p>" || match.Value == "<p />" || match.Value == "<br />")
                        {
                            // Found the end of a paragraph, so append this text to the textblock
                            var text = itemText.Substring(startidx, match.Index – startidx);
                            text = tagFinder.Replace(text, "");
                            txt.Inlines.Add(text);
                        }
                        else if (match.Value.Contains("<img"))
                        {
                            // Add the text up to the image tag
                            var text = itemText.Substring(startidx, match.Index – startidx);
                            text = tagFinder.Replace(text, "");
                            txt.Inlines.Add(text);

                            // Locate the url of the image
                            var idx = match.Value.IndexOf("src");
                            var url = match.Value.Substring(idx + 5, match.Value.IndexOf(""", idx + 6) – (idx + 5));

                            // Create an image and add to stackpanel
                            var img = new Image() { Source = new BitmapImage(new Uri(url)) };
                            img.Width = this.scrollViewer1.ActualWidth / 2;
                            img.Stretch = Stretch.UniformToFill;
                            this.stackPanel1.Children.Add(img);

                            // Create a new textblock and add to stackpanel
                            txt = new TextBlock() { TextWrapping = TextWrapping.Wrap };
                            this.stackPanel1.Children.Add(txt);
                        }

                        // Look for the next tag
                        startidx = match.Index + match.Length;
                        match = tagFinder.Match(itemText, match.Index + 1);

                    }
                    // Add the remaining text
                    txt.Inlines.Add(itemText.Substring(startidx));

                    // Add some space before the next post
                    txt.Inlines.Add(new LineBreak());
                    txt.Inlines.Add(new LineBreak());
                }
            }
        }

Disabling Debugging Security for Windows Mobile

Disabling Debugging Security for Windows Mobile

Every time I get a new device I go through almost one debug cycle before I’ve had enough and decide to disable the Windows Mobile security. If you aren’t familiar with Windows Mobile security there are essentially one (for pocketpc/Windows Mobile Professional) or two levels (for smartphone/Windows Mobile Standard). In both cases, if security is enabled the device will prompt you, as in the following screenshot, to allow untrusted assemblies to run on the device. Of course, this includes a number of assemblies that are used during debugging, so a royal pain to have to click Yes for each assembly that is loaded.

image

The easiest way to disable this “feature” is to use the Device Security Manager that comes with Visual Studio 2008 (Tools –> Device Security Manager). So long as your device is connected via ActiveSync or Windows Mobile Device Center you should see a display similar to the next image – this shows my device with Prompt One Tier as the current setting.

image

Selecting “Security Off” and hitting the Deploy to Device means that I can easily debug applications without having to click Yes to those annoying prompts.

image

Happy coding…..

BeeMobile4.NET Gets Designer Support in Visual Studio for Windows Mobile Applications

BeeMobile4.NET Gets Designer Support in Visual Studio for Windows Mobile Applications

I’ve just been in contact with the team at BeeMobile4.net and they told me that they now have full designer support within Visual Studio 2005 and Visual Studio 2008 for all their controls. When you purchase their iPack you not only get all their controls but the ability to use them from the toolbox in Visual Studio. Of course, since Windows Mobile application development isn’t supported in Visual Studio 2010 their controls don’t appear there!

Here’s a quick walk through of the experience. Firstly, love the installation process – good attention to detail through the install process.

image

Once installed I was amazed by the number of controls they now have on offer.

image

Rather than go through each of the controls in painful detail I downloaded their sample application that showcases all the controls:

image image image

Here you can see a splash screen with an on screen progress bar and a semi-transparent header. The next image includes two main regions including a list, all with transparency so you can see the background. The third image shows you their semi-transparent message box – this is configurable to control both the text, opacity and the buttons displayed.

imageimage

  image image

These four images just show some of the other controls in action.

If you’re doing Windows Mobile development I’d highly recommend these controls as a great starting point to make your application look amazing. Also, if you have other specific control requirements, contact the team at BeeMobile4.Net as they are able to build controls to suit your requirements.