Microsoft@Olympos-Redmond-Seattle

Wiki_seattle_alki_01[1]

Abban a szerencsés helyzetben vagyok, hogy részt vehetek az idei MVP találkozón Redmond-ban.

Redmond Bellevue mellett van, ami meg Seattle mellett van Washington államban, Alaska-t leszámítva a legészakibb államok egyike, ami persze csak annyit jelent hogy egy magasságban van kb. Magyarországgal. De nekik van egy Csendes-óceánuk, ami télen fűti, nyáron hűti őket. Illetve az állam közepén húzódik a Cascade hegység, 4000-es csúcsokkal, ami előtt feltorlaszolódik a csapadék, így ez az USA legcsapadékosabb vidéke :(((. Nem egy California. Ez kb annyit jelent hogy átlag évente 3000mm csapadék esik (csúcs ~6000mm), ill hóesésre átszámítva ez a hegység lábánál átlag 5 métert jelent (csúcs ~29!!!! méter):
Wa_rain_map[1]
(from wiki, a léneg hogy ez itt inch-ben van, azaz 25,4 el szorozni kell)

Ennek persze van jó oldala is: minden zöld! Érdemes megnézni a képeket amiket kidob pl. a bing keresője. Itt játszódik a Twillight-saga bestseller ill. filmadaptáció története (Olympic National Park), ill. régi motorosoknak többet mond a Twink Peaks sorozat… Aki meg a vulkános-kitöréses-lávafolyamos-menekülős filmekben van otthon, az tudhatja hogy itt található a Mount St. Helens is.

olympic-national-park-usa[1]

Seattle az állam “fővárosa” kb 600.000 emberrel, amely egy indián tőrzsfőnök után kapta a nevét. Gazdag város. GDP-je sokszorosa ‘kishazánkénak, ami meg is látszik a városon, legalábbis amit hallottam róla. Majd meglátjuk.

‘Tehát ‘jónéhány barátommal és MVP kollégámmal a következő 10 napot a fenti városban fogjuk tölteni, amiből 4 nap konferencia, közvetlenül a Product Group-okkal. Kíváncsian várjuk!
A maradék időt Seattle és környéke fogja kitölteni.Túristáskodunk.

Egy estét kivéve. Mikor tervezgettük a programot Telek Andi kolléganőm (ha jól emlékszem) mesélte hogy voltak egy igazi ízig-vérig amerikai sporteseményen: kosárlabda. Minden volt ami a nagy könyvben elő van írva: két jó csapat, sok ezer üvöltő amerikai (nem-nem, nem olyanok mint amilyenek a Fradi-Újpest meccsen vannak), kóla, sör, hamburger.
Ezen felbuzdulva elkezdtünk gondolkodni hogy most is el kellene menni egy meccsre. Kosárlabda kilőve, NFL-ben most volt a Superball, marad a hoki. És ekkor esett le hogy ugyan akkor lesz a 2010-es Téli Olimpia Vancouver-ben, ami amerikai viszonylatban a szomszédban van.
past.h5[1]
(off: ez kb 220km-t jelent. Autokölcsönző cég oldalán van olyan szolgáltatás ami megmondja hogy mennyibe fog kerülni az út oda vissza. Kíváncsiságból rákattintottam: mindösszesen ~ 4000ft.  450km-re. mondhatni baráti.  kb 90ft egy liter benzin.)
Így gyorsan nyomozás hogy hogy lehetne jegyet szerezni. Meglepően könnyen: besétál az ember egy bizonyos utazási irodába a Ferenciek terén, elmondja mit szeretne, majd 5 perc múlva csippan a telefonja egy üzenet miatt ami konstatálja hogy levonták a jegy árát (szép kis összeg amúgy), majd ballag hazafele 4 darab Németország-Fehéroroszország férfi hockey-meccs jeggyel :).

Kicsit félek a meccstől mivel eddig életemben csak TV-ben láttam hokit (leszámítva a NetAcademiában lévő csocsó-szerű készüléken játszó kollégákat), pontosabban nem láttam, mivel TVn csak a 20 éve meccset néző embereknek élvezetes, másoknak követhetettlen. De Gabz barátom megnyugtatott: élőben teljesen más. Élvezetes játék. Olimpia pedig rátesz egy lapáttal.

Tehát irány Vancouver is egy napra!

A terv az hogy beszámolok itt a blogomon a történésekről, legalább annyira önös érdekből, mint más okból: mélyebben rögzüljenek a várhatóan kellemes emlékek, amiknek lehet hogy lesz (ki)hatása a következő néhány évemre.
Természetesen szakmai információkat is megosztok, bár gondolom a legtöbb info NDA-s lesz. (Be sem tehetem a lában ha nem fogadtam el az NDA szerződést. És itt ténylegesen egy szerződésre gondolok, nem ‘holmi check-box pipára valami weboldalon.)

Kategória: Seattle | 1 hozzászólás

Microsoft NévKommandó

Mindenki tudja, hogy a Microsoft-nál igazán keményen dolgozik a névkommandó…
Nem lehet tudni soha, mi lesz a végleges neve valaminek, ha egyáltalán van ilyen.

Megpróbálom összeszedni ezeket. Bár esélytelen szerintem.

  • Astoria->ADO.Net Data Services-> WCF Data Services
    Ide tartozik még szerintem az OData kulcsszó, ami igazából nem egy framework/technologia/stb, hanem tulajdonképpen A protokoll/szabvány amit a WCF DS/WCF Rest képvisel…
    Ill. a témakörhöz kapcsolódik a WCF REST is
  • .Net RIA Services -> WCF RIA Services
  • Workflow+WCF->Dublin ->Workflow Services
  • Velocity->Microsoft Distributed Cache
  • Továbbá: Workflow+WCF+Velocity===Workflow Services + MS Distributed Cache –> Windows Server AppFabric
    Nem keverendő össze az Azure AppFabric-el
  • codename Dallas –>??
  • Azure .NET Services –> Windows Azzue AppFabric
    E mögött ki lakik?
    (Egy nagyon-nagyon szemléletes video : Mi az a Service Bus és az Access Control? )
    1 : Service Bus –> (nagyon-nagyon pongyolán) egy technológia amivel mindenféle alkalmazásokat tudunk (generikusan módon) összekapcsolni
    2 : Access Control –>a fenti összekapcsoláshoz generikus security
  • SQL Data Services->SQL Azure
  • ParalellFX->Parallel Extensions to the .NET Framework
    Itt azért annyira nem volt sikeres a kommandó 🙂
    Persze ide tartozik még a Paralell LINQ azaz a PLINQ
  • Persze vannak további régi klasszikusok:
    Avalon->WPF
    Indigo->WCF

Hirtelen ennyi. Javítsatok ki ha tévedtem valamiben, ill várjuk a további példákat a commentekben…

Kategória: .Net | Megjegyzés hozzáfűzése

Csajozós Silverlight Media Player

WTW-n volt egy feladat, hogy kellett építeni egy SmoothStream-es oldalt, ami szépen lejátsza a feltöltött videokat.
Annak kapcsán kellett/lehetett, Szabolcs megfogalmazása szerint, csajozós Silverlight playert készíteni.

Nos, erre van egy hivatalos eszköz is, ha valaki egyedi lejátszóra vágyik:

Smooth Streaming Player Development Kit : http://www.iis.net/expand/SmoothPlayer

Microsoft Silverlight Media Framework v1.1 : http://smf.codeplex.com/

 

How-to videok hozzá:

Embedding The Video Player
http://www.silverlight.net/learn/videos/Silverlight-Media-Framework/Embedding-Video-Player/
Styling And Templating The Video Player
http://www.silverlight.net/learn/videos/Silverlight-Media-Framework/Styling-Templating-Video-Player/
Extending The Video Player
http://www.silverlight.net/learn/videos/Silverlight-Media-Framework/Extending-Video-Player/
Out Of Stream Data Access
http://www.silverlight.net/learn/videos/Silverlight-Media-Framework/Out-Of-Stream-Data-Access/
Using Application Settings
http://www.silverlight.net/learn/videos/Silverlight-Media-Framework/Using-Application-Settings/
Creating Custom Timeline Markers
http://www.silverlight.net/learn/videos/Silverlight-Media-Framework/Creating-Custom-Timeline-Markers/
Building A Custom Bitrate Meter
http://www.silverlight.net/learn/videos/Silverlight-Media-Framework/Building-Custom-Bitrate-Meter/
Using SMF Logging
http://www.silverlight.net/learn/videos/Silverlight-Media-Framework/Using-SMF-Logging/
Live Mode vs. VOD
http://www.silverlight.net/learn/videos/Silverlight-Media-Framework/Live-Mode-vs-VOD/
Hosting VOD using IIS Media Services
http://www.silverlight.net/learn/videos/Silverlight-Media-Framework/Hosting-VOD-using-IIS-Media-Services/

Kategória: Silverlight | Megjegyzés hozzáfűzése

Ebook’s

Hasznos könyvek. Azt hiszem még ezek nem voltak:

Improving Web Services Security : http://www.codeplex.com/WCFSecurityGuide

Team Foundation Server Guide : http://www.codeplex.com/TFSGuide/Release/ProjectReleases.aspx?ReleaseId=6280
( nem a 2010-es 🙂   )

Kategória: Books | 1 hozzászólás

Silverlight dolgok…

Egy érdekes cikk a “hogyan építsünk b*z*nagy skálázható Live Smooth Streaming megoldást” témában:
(mint amit pl az NBC csinál a Sunday Night Football keretében : http://nbcsports.msnbc.com/id/26393211/)

http://blogs.iis.net/samzhang/archive/2009/12/16/how-to-build-scalable-and-robust-live-smooth-streaming-server-solutions.aspx

 

Bár még több mint egy hónap van hátra, de már elég sok minden fent van a MIX10-ről:
(http://live.visitmix.com)

Egy rakat hasznos dolog Silverlight 4-el kapcsolatban:

Ha (véletlen) még nem ismernénk ezeket…

Kategória: Kategorizálatlan | Megjegyzés hozzáfűzése

VS2010 MCP Exams

Kicsit utána jártam a dolgoknak, és ahogy az már lenni szokott az új .Net új vizsgákat/minősítéseket hoz magával.

Egyelőre persze semmi sem végleges 100%-ban (csak 99%), de a következőket lehet kibogarászni:

  • TS: Microsoft .NET Framework 4, Windows Applications Development (WPF)
  • TS: Microsoft .NET Framework 4, Web Applications Development
  • TS: Microsoft .NET Framework 4, Windows Communication Foundation Development
  • TS: Microsoft .NET Framework 4, Accessing Data with ADO.NET
  • Pro: Designing and Developing Windows Applications Using Microsoft .NET 4
  • Pro: Designing and Developing Web Applications Using Microsoft .NET Framework 4

Azt hiszem a nevek magukért beszélnek.
Tehát picit egyszerűsödik a helyzet. TS és PRO szinten megmarad a Web vs. Windows irány. Továbbá a speciális TS vizsgák száma kettővel csökkent : már csak az ADO.Net (ez gondolom takarja pl. az EF-t), ill. a WCF maradt (Workflow és Winforms nincs, de olvasatom szerint a Windows vizsga WinForms-t ÉS WPF-t is tartalmaz).

Megszűnt az Enterprise PRO szint, talán azért mert nem igazán volt jól eltalálva… legalábbis ez olvasható blogokban.

Upgrade-ről nincs infó, de gondolom lesz, mint ahogy eddig is volt.

Silverlight vizsgáról egyelőre nem tudni, viszont várhatóak a következők, bár ezekre csak utalás volt, semmi konkrét:

  • Windows Mobile 7
  • Sharepoint dev
  • Expression Blend/WEB
  • Software tester

Továbbra sem várható hogy lesz fejlesztő MCM (Microsoft Certified Master) vagy MCA (Microsoft Certified Architect) minősítés… bár ez már jóval több mint egy vizsgával megszerezhető plecsni.

Ha már a vizsgáknál tartunk, újra van nyárig Second Shot, azaz ha nem sikerül az elsőre, akkor a második próbálkozás ingyen van!

Hajrá!!!

Kategória: MCP | Megjegyzés hozzáfűzése

Cool Silverlight demó

Biztos ismeri már mindenki, de azért nem baj… hátha mégse:

Egy kis egészségügy… mikor lesz ilyen a magyar?!?!

http://www.mscui.net/PatientJourneyDemonstrator/

Érdemes megnézni….

Kategória: Silverlight | 3 hozzászólás

Ingyenes E-book 2.

Kategória: Books | Megjegyzés hozzáfűzése

Silverlight 4 Printing/Nyomtatás

Nyomtassunk Silverlight-ból!

A Silverlight 4 egyik nagy újdonsága, amit mindeki kért hogy tudjon nyomtatni. Én nekem ezzel kapcsolatban vannak fenntartásaim, de ezt ugye már megbeszéltük a DevPortal-on….

Mondjuk amit most tud az SL az mindeképp jó, csak ne gondolja senki, hogy akkor el lehet felejteni a Rep.Serv. megoldásokat 😀

Tehát, kell valami adatforrás, amit megjelenítünk a feleületen…Ez legyen az AdventureWorks Product tábla.
Jelenítsük ezt meg egy ListBox-ban, egy DataTemplate segítségével. Ekkor két lehetőségünk van:

  1. private void btnPrintGrid_Click(object sender, RoutedEventArgs e)
       {
           popCM.IsOpen = false;
    
           //Print
    
    
           int page = 1;
           int record = 0;
    
           // create print document:
           PrintDocument printDoc = new PrintDocument();
           printDoc.PrintPage += (s, args) =>
           {
    
               double next_pos = 0;
               double next_height = 40;
               StackPanel spPrint = new StackPanel();
               spPrint.Width = args.PrintableArea.Width;
               while (record < datas.Count && next_pos + next_height <= args.PrintableArea.Height)
               {
                   StackPanel spH = new StackPanel();
                   spH.Orientation = Orientation.Horizontal;
                   spH.Height = next_height;
                   spH.Children.Add(new TextBlock() {
                       Margin = new Thickness(0, 3, 3, 3), 
                       Text = datas[record].ProductID.ToString() });
    
                   spH.Children.Add(new TextBlock() { 
                       Margin = new Thickness(0, 3, 3, 3), 
                       Text = datas[record].Name.ToString() });
    
                   spH.Children.Add(new TextBlock() { 
                       Margin = new Thickness(0, 3, 3, 3), 
                       Text = datas[record].ListPrice.ToString("c") });
    
                   spH.Children.Add(new Rectangle()
                   {
                       Margin = new Thickness(0, 3, 3, 3),
                       Width = datas[record].ProductID / 10,
                       Fill = new SolidColorBrush(Colors.Red)
                   });
                   spPrint.Children.Add(spH);
    
                   record++;
                   next_pos += next_height;
               }
    
    
               args.HasMorePages = record < datas.Count;
               args.PageVisual = spPrint;
    
               page++;
           };
           printDoc.Print();
       }

  2.  
    private void btnWSYIWYG_Click(object sender, RoutedEventArgs e)
        {
            popCM.IsOpen = false;
    
            int page = 1;
            int record = 0;
    
            // create print document:
            PrintDocument printDoc = new PrintDocument();
            printDoc.PrintPage += (s, args) =>
            {
    
                double next_pos = 0;
                double next_height = 40;
                StackPanel spPrint = new StackPanel();
                spPrint.Width = args.PrintableArea.Width;
                while (record < 
                    10//datas.Count
                    && next_pos + next_height <= args.PrintableArea.Height)
                {
                    ContentPresenter cp = new ContentPresenter();
                    cp.Content = datas[record];
                    cp.ContentTemplate = this.Resources["dtProd"] as DataTemplate;
                    cp.Measure(new Size(args.PrintableArea.Width, args.PrintableArea.Height));
                    spPrint.Children.Add(cp);
    
                    next_pos += cp.DesiredSize.Height;
    
                    record++;
                    next_pos += next_height;
                }
    
    
                args.HasMorePages = record < 10;// datas.Count;
                args.PageVisual = spPrint;
    
                page++;
            };
            printDoc.Print();
        }
    

     

  3. A DataTemplate hozzá:

        <UserControl.Resources>
            <DataTemplate x:Key="dtProd">
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding ProductID}" MinWidth="100"></TextBlock>
                    <TextBlock Text="{Binding Name}" MinWidth="100"></TextBlock>
                    <TextBlock Text="{Binding ListPrice}" MinWidth="100"></TextBlock>
                    <Rectangle Fill="{Binding Color}" MinWidth="100"></Rectangle>
                </StackPanel>
            </DataTemplate>
        </UserControl.Resources>
    

Első esetben az kerül nyomtatásra, amit mi alkotunk kézzel-lábbal-kóddal. Látható hogy mi vagyunk felelősek azért hogy összerakjunk mindent!.
Második esetben a DataTemplate segít nekünk. Tehát itt tulajdonképpen azt kapjuk amit a monitoron is látunk. Ami több esetben rossz mint amennyiben jó… Ezzel vigyázni kell… Persze itt segít nekünk a Layout természetes adaptívsága.

A nyomtatás egyszerűen 3 lépésből áll (minimum):

  1. PrintDocument létrehozása
  2. PrintPage-re iratkozás, és egy oldal megadása
  3. Print() metódus.

Ennyi… nem is bonyolult.

Forráskód: skydrive
ScreenCast: devportal
Silverlight Player : lejátszás

    
    

Kategória: Silverlight | 1 hozzászólás

Mi van a DataGrid hátulján? (Készítsünk saját vezérlőt (Visual Studio-ban) VSM-el I/II)

 

Gondolom már mindenki elgondolkodott rajta mi van a DataGrid hátulján 🙂 ugye?!?
Vagy mégse?!?

Azt ugye már tudjuk hogy pixel szinten pontosan ugyan az! (Velvárt András Silverlight 3 Konferencia 16:50)

De mi azt akarjuk!!! megtudni mi van ténylegesen a DataGrid hátulján.
Ehhez a következőkre lesz szükségünk:

  • Silverlight 3 VSM
  • Silverlight 3 Projection

 

Első körben mindent Visual Studio-val oldunk meg, második felvonásban pedig Blend 3-al.

  1. Hozzuk létre a vezérlőnk class-át, melybe felvesszük az vezérlőt, és a hátulját :
    public class ControlAndBack:ContentControl
        {
            private UIElement frontControl;
            public UIElement FrontControl
            {
                set
                {
                    frontControl = value;
                    SetFrontAndBack();
                }
                get
                {
                    return frontControl;
                }
            }
    
            private ContentControl front;
            private ContentControl back;
            private void SetFrontAndBack()
            {
                if (front != null)
                {
                    front.Content = FrontControl;
                }
                if (back != null)
                {
                    back.Content = BackControl;
                }
            }
    
            private UIElement backControl;
            public UIElement BackControl
            {
                set
                {
                    backControl = value;
                    SetFrontAndBack();
                }
                get
                {
                    return backControl;
                }
            }
    }

    (az eljárásról a további pontokban)
    Ebben két property-ben tároljuk a vezérlőnk elejét, és hátulját.
    (a viccet félre téve, így bármelyik vezérlőnk hátuljára el tudunk helyezni bármit)

  2. Hozzuk létre a Themes\generic.xaml-t, és abban a vezérlőnk stílusát:
    <Style TargetType="local:ControlAndBack">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:ControlAndBack">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"></ColumnDefinition>
                            <ColumnDefinition></ColumnDefinition>
                            <ColumnDefinition Width="Auto"></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                                       
                        <Button x:Name="btnLeft" Grid.Column="0" Content="&lt;"></Button>
                        
                        <ContentControl x:Name="BackContentControl"
                            Grid.Column="1"
                                        ContentTemplate="{TemplateBinding ContentTemplate}"
                                        HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                                        VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                                        RenderTransformOrigin="0.5 0.5">          
                      
                        <ContentControl x:Name="FrontContentControl"
                            Grid.Column="1"
                                        ContentTemplate="{TemplateBinding ContentTemplate}"
                                        HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                                        VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                                        RenderTransformOrigin="0.5 0.5">
                                               </ContentControl>
    
                        <Button  x:Name="btnRight" Grid.Column="2" Content="&gt;"></Button>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


    A vezérlőnk template-je nem más mint 2 gomb (balra-jobbra) ill. 2 ContentControl amiből egyszerre majd csak egy fog látszani.

  3. Osztály konstruktora, hogy egymásra találjon az osztály és a template:
    public ControlAndBack()
         {
             this.DefaultStyleKey = typeof(ControlAndBack);
         }

  4. override OnApplyTemplate, hogy egymásra találjon a Template-ben lévő vezérlő, és az osztály implementációja:
    public override void OnApplyTemplate()
        {
            //base.OnApplyTemplate();
    
            front = this.GetTemplateChild("FrontContentControl") as ContentControl;
            back = this.GetTemplateChild("BackContentControl") as ContentControl;
    
            Button b = this.GetTemplateChild("btnLeft") as Button;
            b.Click += new RoutedEventHandler(Change_Click);
    
            b = this.GetTemplateChild("btnRight") as Button;
            b.Click += new RoutedEventHandler(Change_Click);
    
    
            SetFrontAndBack();
        }

  5. Vezérlő Projection-beállítása:
    (hogy forgatni lehessen)
        <ContentControl x:Name="BackContentControl"
                                Grid.Column="1"
                                            ContentTemplate="{TemplateBinding ContentTemplate}"
                                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                                            VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                                            RenderTransformOrigin="0.5 0.5">          
                                                       <ContentControl.Projection>
                                    <PlaneProjection RotationY="-270"></PlaneProjection>
                                </ContentControl.Projection>
                            </ContentControl>
    
                            <ContentControl x:Name="FrontContentControl"
                                Grid.Column="1"
                                            ContentTemplate="{TemplateBinding ContentTemplate}"
                                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                                            VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                                            RenderTransformOrigin="0.5 0.5">
                                                       <ContentControl.Projection>
                                    <PlaneProjection></PlaneProjection>
                                </ContentControl.Projection>
                            </ContentControl>
    

  6. VSM elkészítése:
    (Hogy forogjon is. A két állapotban van megadva hogy mit és hogyan kell animálni mikor az adott állapotba érkezünk. Az egyik animáció előhozza míg a másik eltünkteni a megfelelő ContentControl-t)
    <vsm:VisualStateManager.VisualStateGroups>
                        <vsm:VisualStateGroup x:Name="PresentationStates" >
                            <vsm:VisualState x:Name="Front">
                                <Storyboard>
                                
    
                                    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" 
    Storyboard.TargetName="BackContentControl"
    Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)"> <EasingDoubleKeyFrame KeyTime="00:00:00" Value="0"/> <EasingDoubleKeyFrame KeyTime="00:00:00.3000000" Value="-90"/> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.3"
    Storyboard.TargetName="FrontContentControl"
    Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)"> <DiscreteDoubleKeyFrame KeyTime="00:00:00.3" Value="-270" >
    </
    DiscreteDoubleKeyFrame> <EasingDoubleKeyFrame KeyTime="00:00:00.3" Value="-270"/> <EasingDoubleKeyFrame KeyTime="00:00:00.6000000" Value="-360"/> </DoubleAnimationUsingKeyFrames> </Storyboard> </vsm:VisualState> <vsm:VisualState x:Name="Back"> <Storyboard> <DoubleAnimationUsingKeyFrames BeginTime="00:00:0.3" Storyboard.TargetName="BackContentControl" Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)"> <DiscreteDoubleKeyFrame KeyTime="00:00:00.3" Value="-270" >
    </
    DiscreteDoubleKeyFrame> <EasingDoubleKeyFrame KeyTime="00:00:00.3" Value="-270"/> <EasingDoubleKeyFrame KeyTime="00:00:00.6000000" Value="-359.999"/> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
    Storyboard.TargetName="FrontContentControl"
    Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)"> <EasingDoubleKeyFrame KeyTime="00:00:00" Value="0"/> <EasingDoubleKeyFrame KeyTime="00:00:00.3000000" Value="-90"/> </DoubleAnimationUsingKeyFrames> </Storyboard> </vsm:VisualState> </vsm:VisualStateGroup> </vsm:VisualStateManager.VisualStateGroups>

  7. Kódban állapotok közötti váltás:
    (Üzleti/vezérlő “logika”)
    private bool isFrontActive = true;
    void Change_Click(object sender, RoutedEventArgs e)
    {
        if (isFrontActive)
        {
            VisualStateManager.GoToState(this, "Back", true);
        }
        else
        {
            VisualStateManager.GoToState(this, "Front", true);
        }
        isFrontActive = !isFrontActive;
    }

  8. És teszt:
    <UserControl x:Class="ControlAndBack.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d=http://schemas.microsoft.com/expression/blend/2008
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480" Width="600" Height="400" xmlns:local="clr-namespace:ControlAndBack" > <Grid x:Name="LayoutRoot"> <local:ControlAndBack> <local:ControlAndBack.FrontControl> <Image Source="winter.jpg"></Image> </local:ControlAndBack.FrontControl> <local:ControlAndBack.BackControl> <Image Source="summer.jpg"></Image> </local:ControlAndBack.BackControl> </local:ControlAndBack> </Grid> </UserControl>

 

Persze érdemes eljátszani az animációval, alignment-ekkel,stb…
És persze érdemes megnézni a Toolkit-ben lévő TransitioningContentControl-t

Forráskód:  skydrive
ScreenCast letöltés : devportal
Silverlight-link:

Kategória: Silverlight | Megjegyzés hozzáfűzése