Pages

Saturday, June 25, 2011

Cleaning up a rogue SharePoint 2010 Shared Service Application

A couple of weeks ago I run into problems with a SharePoint 2010 Search SSA which apparently did not work anymore. Nothing helped to get it working again so we decided to delete it. Unfortunately doing this through the UI did not work nor did using Powershell. So we decided to just delete the associated SQL database. Afterwards I needed to remove the reference in the SSA administration screen. Luckily there is a stsadm command to do this:

Stsadm -o deleteconfigurationobject -id “GUID identifying the Search SSA”

To get at the GUID for the Search SSA – you can use the Get-SPEnterpriseSearchServiceApplication Powershell command.

This is probably not the recommended way of doing this but if nothing else helps you can still revert to this method.

Thursday, June 16, 2011

Metro Style UI in iOS 5

      Today, when I've changed my SIM card, I've noticed this screen on my iPhone:


 
     The icon seems more an WP7 icon then an iPhone one.  Good choice the Metro UI :)

Monday, June 13, 2011

ΠΡΟΣΟΧΗ !!! Εφαρμογή Android σπάει λογαριασμούς Facebook-Twitter σε 30"

Οι δοκιμές που έγιναν από συντάκτες του Engadget έδειξαν οτι η εφαρμογή μέσα σε 30 δευτέρα αναγνώρισε τον λογαριασμό του Facebook που ήταν ανοιχτός στο laptop και έκανε καταχωρήσεις στον λογαριασμό του χρήστη. Με άλλα λόγια, οποιοσδήποτε μπαίνει σε ένα ασύρματο δίκτυο μπορεί να μπει στα accounts όσων είναι συνδεδεμένοι στο ίδιο δίκτυο και χρησιμοποιούν το Facebook εκείνη τη στιγμή, πολύ εύκολα και πολύ γρήγορα. Αυτό γίνεται ακόμα κι αν το Wi-Fi δίκτυο έχει ασφάλεια και είναι κλειδωμένο με WEP ή WPA/WPA2. Μόνο όσοι χρήστες είναι συνδεδεμένοι με ασφαλή σύνδεση (https) δεν κινδυνεύουν. 

Παρόλα αυτά όμως, η ασφαλής σύνδεση ενώ είναι μια επιλογή διαθέσιμη για όλους τους χρήστες του Facebook, δεν είναι σχεδόν ποτε η default επιλογή.

Για οσους θυμούνται το Firesheep που είναι ένα extension του Firefox για υποκλοπή cookies, υπάρχει και συνέχεια.  Ένας φοιτητής από την Πολωνία ακολουθώντας τα βήματα του Firesheep, ανέπτυξε μια εφαρμογή για Android, το FaceNiff, η οποία δίνει στον κάτοχο της συσκευής τη δυνατότητα να κλέψει στοιχεία για λογαριασμούς Twitter/Facebook κλπ. από όσους είναι συνδεδεμένοι στο ίδιο δίκτυο με Wi-Fi.

Οι πληροφορίες αναφέρουν ότι το FaceNiff δουλεύει και σε άλλες υπηρεσίες, όπως το Twitter, το YouTube και το Amazon και ο δημιουργός του Bartosz Ponurkiewicz υπόσχεται να προσθέσει ακόμη περισσότερες στο μέλλον. Τουλάχιστον με το Firesheep κάθε επίδοξος hacker έπρεπε να καθίσει και να ανοίξει ένα φορητό υπολογιστή για να προσπαθήσει. Τώρα τα πράγματα είναι πολύ πιο εύκολα και μέσα σε οπουδήποτε δημόσιο wi-fi δίκτυο θα μπορεί ο καθένας να μπει σε λογαριασμούς Twitter και Facebook άλλων χρηστών άμεσα από το κινητό του, χωρίς κανείς να αντιληφθεί τίποτα αφού θα είναι σαν να στέλνει ένα SMS.


Απο το myPhone.gr οπου το πρωτοδημοσιευσα

Wednesday, June 8, 2011

Μήπως η Apple σταμάτησε να καινοτομεί και απλώς τρέχει να προλάβει ....

Οι ανακοινώσεις της Apple με το μάτι ενος χρήστη του Android και των WP7

Στο WWDC 2011 η Apple παρουσίασε μεταξύ άλλων τη νέα έκδοση iOS 5.0 και το iCloud.
Το νέο iOS 5 θα είναι έτοιμο κάποια στιγμή το φθινόπωρο με μια beta να είναι ήδη διαθέσιμη
για τους developers από τώρα.

Τι νέο είδαμε όμως στην παρουσίαση ??? Υπήρχε κάποια πραγματική καινοτομία ??? Μάλλον λίγα πράγματα γιατί ας πάρουμε τα πράγματα από την αρχή και να δούμε ποια χαρακτηριστικά παρουσιαστήκαν σαν first time (για πρώτη φορά).

1. iCloud η όπως λέμε όλα στο "σύννεφο"
Ξέρω πολλούς που δεν είναι ιδιαίτερα ανοιχτοί στο να έχουν όλα τα προσωπικά στους στοιχειά
αποθηκευμένα στους servres Apple (το ίδιο και για Google MS), αλλά που είναι το νέο εδώ.
Υπηρεσίες όπως το Skydrive+Livemesh Dropbox και οι υπηρεσίες της google (docs picasa κλπ)
το κάνουν αυτό εδώ και καιρό.
Και αυτό το 30 ημέρες δεν το κατάλαβα ?? Μετά θα σβήνουν τις φωτογραφίες ??
2. iTunes + iCloud. Η μουσική μας στο "σύννεφο".
Δηλαδή τώρα αυτό δεν είναι το ίδιο με το Music που ανακοίνωσε πριν από λίγο καιρό η google;

3. Notification system.
Και αυτό είναι ακριβώς το ίδιο με το Android και τα WP7 !!!

4. Wi-fi sync Ασύρματος Συγχρονισμός !!!
Αυτό δεν είναι κάτι νέο παιδιά !!..Υπάρχει ήδη στο Android και στα Wp7

5. Βuy once download to other devices.
Ισχύει ήδη στο Android και ανακοινώθηκε για το mango από το Zune Marketplace ..

6. iMessagε, Built-in twitter, background download service
Αυτά είναι ήδη στο Android kai ανακοινώθηκαν ήδη για το Mango. Ειδικά η Microsoft έχει
προσθέσει και το Facebook chat με επιλογή για το τρόπο που θέλεις να στείλεις IM (άμεσο
μήνυμα). Θα διαλέγεις αν θέλεις sms-skype-facebook κλπ
Ε αυτό με το background download service δεν το σχολιάζω !!!!

7. Κουμπί ήχου για την κάμερα
Ούτε και αυτό το σχολιάζω !!!!

8. User Interface (UI).
Δεν έχει γίνει καμιά σημαντική αλλαγή στο περιβάλλον από την 1η έκδοση του iOS.

Όλα τα παραπάνω παρουσιάστηκαν με ένα τρόπο που ξέρει μόνο η Apple σαν first time
(για πρώτη φορά) αν και όλα αυτά υπάρχουν η έχουν ανακοινωθεί από τα ανταγωνιστικά λειτουργικά.

Είναι σίγουρο μετά από τόσα χρόνια η Apple είναι εταιρία που ξέρει καλά το παιχνίδι του
marketing και των media, όπως και το πως να δημιουργεί trend & fashion με τις συσκευές της.

Μήπως όμως τελικά εκεί στο Cupertino έχουν στερέψει από ιδέες και απλώς τρέχουν να
προλάβουν αντιγράφοντας ?????

Εφαρμογη για ΠΛΗΡΕΣ Backup τηλεφωνων με WP7

Πληρες Backup (ROM ρυθμισεις εφαρμογες sms κλπ τα παντα) Ενα πληρες image του τηλεφωνου.

Τα αρχεια που χρειαζονται ειναι εδω
Η εφαρμογη : http://forum.xda-developers.com/atta...8&d=1306988144
Το αρχειο update : http://forum.xda-developers.com/atta...1&d=1298366668

Αν δεν εχετε βαλει το Windows Phone Support Tools ειναι εδω
http://download.microsoft.com/downlo...Tool-amd64.msi

H διαδικασια ειναι σαν να κανει update (reboot κλπ) και αργει λίγο (20λεπτα). ..
To μεγεθος ειναι οσο και η χρησιμοποιημενη μνημη στο τηλεφωνο, στην δικη μου περιπτωση 5,8GB  φροντιστε να εχετε ελευθερο χωρο.


Τρεξτε το προγραμμα Windows Phone 7 Zune Backup.exe (x86 h 64bit) και πατηστε browse για να του πειτε που εχετε το δευτερο αρχειο που κατεβασατε το A0CE706D-12B7-45AC-A5FC-AD04DFCA6E86.100.pks και μετα πατηστε backup Phone και υπομονη

Τα αρχεια του backup αποθηκευονται εδω C:\Users\Το UserName σας\AppData\Local\Microsoft\Windows Phone Update

Μετα το backup μπορειτε και απο το ιδιο προγραμμα αλλα και απο το Zune (Settings/Phone/Update) να κανετε restore κανονικα

Αυτο ειναι το thread της εφαρμογής στο XDA

Tuesday, June 7, 2011

Seven useful tips and tools for Windows Phone 7 developers

If you think I left something out – do not hesitate to leave a comment.

iOS 5 HTML5 Speed Reading

   It's hard to start a post when it passed so much time from the last one. So much things to say but when you want to write about them you realize that are not so important/innovative/interesting or at least worth reading about.
   I remember back in April at Mix Keynote when they presented the IE9 mobile edition that Apple was the worst performer in the tests. This is a small part of the Mix keynote where they show how the various devices perform:



          So ever since April I was curious how much time will it take Apple to get back on the track with Safari mobile browser. Luckily I am the "proud" owner of an iOS developer account with no application published on the App Store (I will blame time and now Novell as I had to change my Macbook on which I had activated the Monotouch license and now it's GONE as nobody answers of that part anymore. I can only hope that Miguel and his team will "cook" a new product as soon as possible. All the money we've spent on Monotouch and Monodroid are now a dead investment). But let's get back to the post.... So today I've downloaded the first beta of the iOS 5 and deployed it to my iPhone 4 and ... SURPRISE... after not even two months the Safari browser outperforms Android and Windows Phone 7 (the way they were two months ago). Here is a small video with the test I ran:


         I can hardly wait to be able to install Mango on my device and it seems that this could happen at the end of June for developers (keeping my fingers crossed). In that case Apple and Microsoft are definitely winning a small battle against Google. It is very important to give the tools developers need when they need them and this is not when the phones ship (being able to test on a real device it's a MUST). While for Apple it is an easy battle to win as they develop the hardware so they decide what to do, Microsoft on the other side has to convince the hardware OEMs and the mobile operators to let developers get early access to Mango and also find a way to make it "work" on all the Windows Phone 7 devices available today .
     iOS 5 brings a lot of interesting new features and I agree that some of them are similar/inspired/copied from Windows Phone 7, but if that makes the product better Microsoft should copy and improve some of the iOS features. Here are some things that I still don't like in WP7 :
  • the most annoying in this moment is the email client that doesn't go to the next email when I delete one but comes back to the inbox and make me lose a lot of  time (for the moment I have mobile internet only on my Omnia 7)
  • I still don't like the application list even if now you can use search or jump list
  • HATE the InCall experience with small buttons and the "half" window (I don't understand why)  that doesn't make sense as you usually will push with the face the outer area and the window will go to background or even more annoying instead of closing the call you will send it to the background 
NAMASTE

Monday, June 6, 2011

Windows Phone 7 and the LongListSelector

If you are using a Windows Phone 7 you have probably seen the elegant way that you can navigate across all of your contacts in the People Hub by using a jump list with the first letters of the names. If you are not using WP7 take a look at this YouTube video explaining the concept:

If you want to use something similar yourself in your own Windows Phone 7 apps, you should take a look the Silverlight for Windows Phone Toolkit – one of the tools you will find in there is the LongListSelector – this control allows you to build a grouped list of items (basically you are grouping by first letter of the first name or last name).

Here are some links to get you started:

Saturday, June 4, 2011

Create a Panorama Application for Windows Phone 7 – [Part-6]

 

In this article we will discuss about how to develop panorama application for Windows Phone 7. Panorama is a compiling control of windows phone 7.

What is panorama?
Lets us know about Panorama, Its mean capturing a series of images to create a pictures wider than, in a single image by "Stitching" the photographs together.

Why panorama’s view?
Panoramic experiences offer a unique way to view data, controls and services by using a long horizontal canvas that extends beyond the confines of the screen.

Objective of this application is to display my friend’s data and it will show my different –different social networks (like Google+, Facebook, LinkedIn and Twitter) friends list on the panorama screen.

Let’s come to the application development part, here we go.

In this post I will show you how to create a panorama application in Windows Phone 7. This post illustrates the following steps:

Step:-1 Open Visual Studio 2010 Ultimate or Express for Windows Phone from the Start menu.

Step:-2 Create a new project by selecting the File menu and click on New Project.

Step:-3 New Project dialog window will be displayed. Expand the Visual C# templates, and then select the Silverlight for Windows Phone templates –> Select “Windows Phone Application” and enter the project name.

WP_01

Step:-4 New project will be created with MainPage.xaml page and it will be opened in the Visual Studio2010 IDE. Now right-click on project in Solution Explorer and click on Add then click on New Item. Select Windows Phone Panorama Page.

WP_02

WP_03

And now enter your desired name of panorama page (in this project I have used default name of PanoramaPage1.xaml) and click on Add bottom. PanoramaPage1 will come up with the default background image. And keep this page in view directory.

Step:-5 add an image (I have used PanoramaBackground.png) to display panorama page background. After add this image it will automatically become a resource image of the application. To check the build action select the PanoramaBackground.png image and press F4 key and see Build Action property is Resource only.

WP_05

Step:-6 now set the panorama control’s background. See below xaml code snippet.

   1: <controls:Panorama.Background>
   2:     <ImageBrush ImageSource="/WP_PanoramaApp;component/PanoramaBackground.png"/>
   3: </controls:Panorama.Background>


Then you are able to view background image at design time in IDE see below picture.




WP_06


Important: You must be aware about how to use resource files in the Windows Phone 7 application. See here

Note: For the time being I have used some static data. To display the data, I have used MVVM (Model View ViewModel) pattern (MVVM pattern we will discussed later in this series).

Step:-7 To display, friends pictures on the panorama control I have added different – different social network friend’s pictures in this application and set Build Action type Content instead of Resource to all pictures property.

WP_07

Step: -8 create a generic class to access the all social networks friend’s data like (name, details and imagepath) I have created an ItemViewModel class which will responsible to provide friend’s data to view. This class basically derived with an INotifyPropertyChanged interface and it is implemented an event name is PropertyChangedEventHandler; and this event call by each property.



   1: public class ItemViewModel : INotifyPropertyChanged
   2: {
   3:     private string _name;
   4:     private string _imagePath;
   5:     private string _details;
   6:  
   7:     public string Name
   8:     {
   9:         get { return _name; }
  10:         set
  11:             {
  12:                 if (value != _name)
  13:                 {
  14:                     _name = value;
  15:                     NotifyPropertyChanged("Name");
  16:                 }
  17:             }
  18:     }
  19:  
  20:     public string ImagePath
  21:     {
  22:         get { return _imagePath; }
  23:         set
  24:         {
  25:             if (value != _imagePath)
  26:             {
  27:                 _imagePath = value;
  28:                 NotifyPropertyChanged("ImagePath");
  29:             }
  30:         }
  31:     }
  32:  
  33:     public string Details
  34:     {
  35:         get { return _details; }
  36:         set
  37:         {
  38:             if (value != _details)
  39:             {
  40:                 _details = value;
  41:                 NotifyPropertyChanged("Details");
  42:             }
  43:         }
  44:     }
  45:  
  46:     #region INotifyPropertyChanged Members
  47:  
  48:     public event PropertyChangedEventHandler PropertyChanged;
  49:  
  50:     private void NotifyPropertyChanged(String propertyName)
  51:     {
  52:         PropertyChangedEventHandler handler = PropertyChanged;
  53:         if (null != handler)
  54:         {
  55:             handler(this, new PropertyChangedEventArgs(propertyName));
  56:         }
  57:     }
  58:     #endregion
  59: }

Step: - 9 create a PanoramaViewModel class to store the static data; the purpose of this class View-Model is responsible for exposing the data objects from the Model in such a way that those objects are easily managed and consumed. Here I have added some static data of different -2 social network’s friend.

See below code snippet:






   1: public class PanoramaViewModel
   2: {
   3:  
   4:     public PanoramaViewModel()
   5:     {
   6:         this.Items = new ObservableCollection<ItemViewModel>();
   7:         this.GooglePlusItems = new ObservableCollection<ItemViewModel>();
   8:         this.FacebookItems = new ObservableCollection<ItemViewModel>();
   9:         this.LinkedIn = new ObservableCollection<ItemViewModel>();
  10:         this.Twitter = new ObservableCollection<ItemViewModel>();
  11:     }
  12:  
  13:     /// <summary>
  14:     /// A collection for ItemViewModel objects.
  15:     /// </summary>
  16:     public ObservableCollection<ItemViewModel> Items { get; private set; }
  17:  
  18:     public bool IsDataLoaded {get; private set; }
  19:     
  20:     /// <summary>
  21:     /// Creates and adds a few ItemViewModel objects into the Items collection.
  22:     /// </summary>
  23:     public void LoadData()
  24:     {
  25:         // Sample data; here you can replace with real data
  26:         this.Items.Add(new ItemViewModel() { Name = "Google+", ImagePath = 
  27:         "/Networks/Facebook/1.jpg", Details = "" });
  28:         this.Items.Add(new ItemViewModel() { Name = "Facebook", ImagePath = 
  29:         "/Networks/Facebook/2.jpg", Details = "" });
  30:         this.Items.Add(new ItemViewModel() { Name = "LinkedIn", ImagePath = 
  31:         "/Networks/Facebook/3.jpg", Details = "" });
  32:         this.Items.Add(new ItemViewModel() { Name = "Twitter", ImagePath = 
  33:         "/Networks/Facebook/4.jpg", Details = "" });
  34:         this.IsDataLoaded = true;
  35:     }
  36:  
  37:     /// <summary>
  38:     /// A collection for ItemViewModel objects.
  39:     /// </summary>
  40:     public ObservableCollection<ItemViewModel> GooglePlusItems { get; private set; }
  41:  
  42:     /// <summary>
  43:     /// Creates and adds a few ItemViewModel objects into the Items collection.
  44:     /// </summary>
  45:     public void LoadGooglePlusData()
  46:     {
  47:         // Sample data; replace with real data
  48:         this.GooglePlusItems.Add(new ItemViewModel() { Name = "Pinal Dave", ImagePath = "/Networks/GoolgePlus/1.jpg", Details = "MVP" });
  49:         this.GooglePlusItems.Add(new ItemViewModel() { Name = "Abhishek Kumar", ImagePath = "/Networks/GoolgePlus/2.jpg", Details = "SSE" });
  50:         this.GooglePlusItems.Add(new ItemViewModel() { Name = "Gaurav Arora", ImagePath = "/Networks/GoolgePlus/3.jpg", Details = "MVP" });
  51:         this.GooglePlusItems.Add(new ItemViewModel() { Name = "Sachin Kapse", ImagePath = "/Networks/GoolgePlus/4.jpg", Details = "SSE" });
  52:         this.GooglePlusItems.Add(new ItemViewModel() { Name = "Mitesh", ImagePath = "/Networks/GoolgePlus/5.jpg", Details = "SSE" });
  53:         this.IsDataLoaded = true;
  54:     }
  55:  
  56:     /// <summary>
  57:     /// A collection for ItemViewModel objects.
  58:     /// </summary>
  59:     public ObservableCollection<ItemViewModel> FacebookItems { get; private set; }
  60:  
  61:     /// <summary>
  62:     /// Creates and adds a few ItemViewModel objects into the Items collection.
  63:     /// </summary>
  64:     public void LoadFacebookData()
  65:     {
  66:         // Sample data; replace with real data
  67:         this.FacebookItems.Add(new ItemViewModel() { Name = "Vinod Kumar", ImagePath = "/Networks/Facebook/6.jpg", Details = "MVP" });
  68:         this.FacebookItems.Add(new ItemViewModel() { Name = "Dhananjay Kumar", ImagePath = "/Networks/Facebook/1.jpg", Details = "MVP" });
  69:         this.FacebookItems.Add(new ItemViewModel() { Name = "Kunal Chowdhury", ImagePath = "/Networks/Facebook/2.jpg", Details = "MVP" });
  70:         this.FacebookItems.Add(new ItemViewModel() { Name = "Malleswar", ImagePath = "/Networks/Facebook/7.jpg", Details = "MVP" });
  71:         this.FacebookItems.Add(new ItemViewModel() { Name = "Mohsin", ImagePath = "/Networks/Facebook/3.jpg", Details = "SSE" });
  72:         this.FacebookItems.Add(new ItemViewModel() { Name = "Sawkat Ali", ImagePath = "/Networks/Facebook/4.jpg", Details = "SSE" });
  73:         this.FacebookItems.Add(new ItemViewModel() { Name = "Karan Singh", ImagePath = "/Networks/Facebook/5.jpg", Details = "SSE" });
  74:         this.IsDataLoaded = true;
  75:     }
  76:  
  77:     /// <summary>
  78:     /// A collection for ItemViewModel objects.
  79:     /// </summary>
  80:     public ObservableCollection<ItemViewModel> LinkedIn { get; private set; }
  81:  
  82:  
  83:     /// <summary>
  84:     /// Creates and adds a few ItemViewModel objects into the Items collection.
  85:     /// </summary>
  86:     public void LoadLinkedInData()
  87:     {
  88:         // Sample data; replace with real data
  89:         this.LinkedIn.Add(new ItemViewModel() { Name = "Daniel Vaughan", ImagePath = "/Networks/LinkedIn/1.jpg", Details = "MVP" });
  90:         this.LinkedIn.Add(new ItemViewModel() { Name = "Pavan Pareta", ImagePath = "/Networks/LinkedIn/2.jpg", Details = "MVP" });
  91:         this.LinkedIn.Add(new ItemViewModel() { Name = "Boryana Miloshevska", ImagePath = "/Networks/LinkedIn/3.jpg", Details = "MVP" });
  92:         this.LinkedIn.Add(new ItemViewModel() { Name = "Dhananjay Kumar", ImagePath = "/Networks/LinkedIn/4.jpg", Details = "MVP" });
  93:         this.LinkedIn.Add(new ItemViewModel() { Name = "Laurent Bugnion", ImagePath = "/Networks/LinkedIn/5.jpg", Details = "MVP" });
  94:         this.IsDataLoaded = true;
  95:     }
  96:  
  97:     /// <summary>
  98:     /// A collection for ItemViewModel objects.
  99:     /// </summary>
 100:     public ObservableCollection<ItemViewModel> Twitter { get; private set; }
 101:  
 102:     /// <summary>
 103:     /// Creates and adds a few ItemViewModel objects into the Items collection.
 104:     /// </summary>
 105:     public void LoadTwitterData()
 106:     {
 107:         // Sample data; replace with real data
 108:         this.Twitter.Add(new ItemViewModel() { Name = "Vesko Kolev", ImagePath = "/Networks/Twitter/0.jpg", Details = "SSE" });
 109:         this.Twitter.Add(new ItemViewModel() { Name = "Joel Ivory Johnson", ImagePath = "/Networks/Twitter/1.jpg", Details = "MVP" });
 110:         this.Twitter.Add(new ItemViewModel() { Name = "Rajesh Rao", ImagePath = "/Networks/Twitter/2.jpg", Details = "iPhone Dev Expert" });
 111:         this.Twitter.Add(new ItemViewModel() { Name = "Harish Ranganathan", ImagePath = "/Networks/Twitter/3.jpg", Details = "Evangelist, Microsoft India" });
 112:         this.Twitter.Add(new ItemViewModel() { Name = "Jouni Miettunen", ImagePath = "/Networks/Twitter/4.jpg", Details = "MVP" });
 113:         this.Twitter.Add(new ItemViewModel() { Name = "Babina Sebastian", ImagePath = "/Networks/Twitter/5.jpg", Details = "..." });
 114:         this.Twitter.Add(new ItemViewModel() { Name = "Rahul", ImagePath = "/Networks/Twitter/6.jpg", Details = "Teacher" });
 115:         this.Twitter.Add(new ItemViewModel() { Name = "Anand", ImagePath = "/Networks/Twitter/7.jpg", Details = "Teacher" });
 116:         this.Twitter.Add(new ItemViewModel() { Name = "Daniel Vaughan", ImagePath = "/Networks/Twitter/8.png", Details = "MVP" });
 117:         this.Twitter.Add(new ItemViewModel() { Name = "Ashish", ImagePath = "/Networks/Twitter/9.jpg", Details = "Lead" });
 118:         this.Twitter.Add(new ItemViewModel() { Name = "Paul Diston", ImagePath = "/Networks/Twitter/10.jpg", Details = "SSE" });
 119:         this.IsDataLoaded = true;
 120:     }
 121: }

Step: -10 code is ready to integrate with the panorama UI control, now we have to add required Panorama Items under the panorama control. For this application I have added 5 panorama items for index of social networks, Google+, Facebook, Linkedin and Twitter. See blow xaml code snippet.



   1: <controls:Panorama x:Name="pnrmNetwork" Title="my friend(s)">
   2:  
   3:     <controls:Panorama.Background>
   4:         <ImageBrush ImageSource="/WP_PanoramaApp;component/PanoramaBackground.png"/>
   5:     </controls:Panorama.Background>
   6:             <!--Panorama item one-->
   7:             <controls:PanoramaItem Header="My Networks" Foreground="Blue">
   8:                 <!--Double line list with text wrapping-->
   9:                 <ListBox Margin="0,0,-12,0" ItemsSource="{Binding Items}">
  10:                     <ListBox.ItemTemplate>
  11:                         <DataTemplate>
  12:                             <StackPanel Margin="0,0,0,5" Width="432" Height="78">
  13:                                 <TextBlock Text="{Binding Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
  14:                             </StackPanel>
  15:                         </DataTemplate>
  16:                     </ListBox.ItemTemplate>
  17:                 </ListBox>
  18:             </controls:PanoramaItem>
  19:  
  20:             <!--Panorama item two (Google+)-->
  21:             <!--Use 'Orientation="Horizontal"' to enable a panel that lays out horizontally-->
  22:             <controls:PanoramaItem Header="Goolge+" Foreground="Crimson">
  23:                 <!--Double line list with image placeholder and text wrapping-->
  24:                 <ListBox Margin="0,0,-12,0" ItemsSource="{Binding GooglePlusItems}">
  25:                     <ListBox.ItemTemplate>
  26:                         <DataTemplate>
  27:                             <StackPanel Orientation="Horizontal" Margin="0,0,0,17">
  28:                                 <Image Width="100" Height="100" Source="{Binding ImagePath}"></Image>
  29:                                 <StackPanel Width="311">
  30:                                     <TextBlock Text="{Binding Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
  31:                                     <TextBlock Text="{Binding Details}" TextWrapping="NoWrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
  32:                                 </StackPanel>
  33:                             </StackPanel>
  34:                         </DataTemplate>
  35:                     </ListBox.ItemTemplate>
  36:                 </ListBox>
  37:             </controls:PanoramaItem>
  38:  
  39:             <!--Panorama item three (LinkedIn)-->
  40:             <!--Use 'Orientation="Horizontal"' to enable a panel that lays out horizontally-->
  41:             <controls:PanoramaItem Header="LinkedIn" Foreground="SpringGreen">
  42:                 <!--Double line list with image placeholder and text wrapping-->
  43:                 <ListBox Margin="0,0,-12,0" ItemsSource="{Binding LinkedIn}">
  44:                     <ListBox.ItemTemplate>
  45:                         <DataTemplate>
  46:                             <StackPanel Orientation="Horizontal" Margin="0,0,0,17">
  47:                                 <Image Width="100" Height="100" Source="{Binding ImagePath}"></Image>
  48:                                 <!--Replace rectangle with image-->
  49:                                 <StackPanel Width="311">
  50:                                     <TextBlock Text="{Binding Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
  51:                                     <TextBlock Text="{Binding Details}" TextWrapping="NoWrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
  52:                                 </StackPanel>
  53:                             </StackPanel>
  54:                         </DataTemplate>
  55:                     </ListBox.ItemTemplate>
  56:                 </ListBox>
  57:             </controls:PanoramaItem>
  58:  
  59:             <!--Panorama item four (Twitter)-->
  60:             <!--Use 'Orientation="Horizontal"' to enable a panel that lays out horizontally-->
  61:             <controls:PanoramaItem Header="Twitter" Foreground="Coral">
  62:                 <!--Double line list with image placeholder and text wrapping-->
  63:                 <ListBox Margin="0,0,-12,0" ItemsSource="{Binding Twitter}">
  64:                     <ListBox.ItemTemplate>
  65:                         <DataTemplate>
  66:                             <StackPanel Orientation="Horizontal" Margin="0,0,0,17">
  67:                                 <!--Replace rectangle with image-->
  68:                                 <Image Width="100" Height="100" Source="{Binding ImagePath}"></Image>
  69:                                 <StackPanel Width="311">
  70:                                     <TextBlock Text="{Binding Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
  71:                                     <TextBlock Text="{Binding Details}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
  72:                                 </StackPanel>
  73:                             </StackPanel>
  74:                         </DataTemplate>
  75:                     </ListBox.ItemTemplate>
  76:                 </ListBox>
  77:             </controls:PanoramaItem>
  78:  
  79:             <!--Panorama item five (Facebook)-->
  80:             <!--Use 'Orientation="Horizontal"' to enable a panel that lays out horizontally-->
  81:             <controls:PanoramaItem Header="Facebook" Foreground="Aquamarine">
  82:                 <!--Double line list with image placeholder and text wrapping-->
  83:                 <ListBox Margin="0,0,-12,0" ItemsSource="{Binding FacebookItems}">
  84:                     <ListBox.ItemTemplate>
  85:                         <DataTemplate>
  86:                             <StackPanel Orientation="Horizontal" Margin="0,0,0,17">
  87:                                 <!--Replace rectangle with image-->
  88:                                 <Image Width="100" Height="100" Source="{Binding ImagePath}"></Image>
  89:                                 <StackPanel Width="311">
  90:                                     <TextBlock Text="{Binding Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
  91:                                     <TextBlock Text="{Binding Details}" TextWrapping="NoWrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
  92:                                 </StackPanel>
  93:                             </StackPanel>
  94:                         </DataTemplate>
  95:                     </ListBox.ItemTemplate>
  96:                 </ListBox>
  97:  
  98:         </controls:PanoramaItem>
  99:  
 100: </controls:Panorama>

WP_04

Step: - 11 double click on Panorama Application Button and write code in code behind use below code snippet for navigate the panorama page.



   1: private void btnPanoramaApplication(object sender, RoutedEventArgs e)
   2: {
   3:     this.NavigationService.Navigate(new Uri("/views/PanoramaPage1.xaml", 
   4:     UriKind.Relative));
   5: }

Important: Need to assign DataContext in the PanoramaPage1 constructor. The

DataContext allow a property that serves as a simple means of accessing individual instances of the ItemViewModel class through a collection declared to be of type ObservableCollection <ItemViewModel>.

Step:-12 Now run the application using F5 button and navigate the panorama application.

WP_09_13


Download Article and Code here



Thank you for your time.