<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6059274208340478729</id><updated>2010-06-11T13:47:16.911+02:00</updated><title type='text'>Blog o programowaniu w Silverlight i nie tylko.</title><subtitle type='html'>Blog Jacka Ciereszko o programowaniu w .NET. Blog poświęcony głównie tematyce technologii Silverlight, choć nie stroni od drobnych wywodów do innych języków oraz technologii. Opisałem w nim jak rozpocząć pracę z Silverlight-em oraz jak skutecznie tworzyć ładne i ciekawe aplikację.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default?start-index=26&amp;max-results=25'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>68</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-3429201942225716458</id><published>2010-06-02T12:01:00.000+02:00</published><updated>2010-06-02T12:01:17.530+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='imaginecup'/><title type='text'>Imagine Cup 2010 - Wyniki</title><content type='html'>Nieładnie się chwalić i ponoć nie wypada ale tym razem zrobię wyjątek ;) Otóż dziś, zgodnie z oficjalnymi wynikami na stronie konkursu &lt;a href="http://imaginecup.com/Competition/Finalists.aspx"&gt;Imagine Cup 2010&lt;/a&gt; (drużyna RHEA której jestem członkiem) zajęła w skali światowej:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Pierwsze miejsce w kategorii &lt;a href="http://imaginecup.com/Competition/mycompetitionportal.aspx?competitionId=45"&gt;Internet Explorer 8 Award&lt;/a&gt; oraz&lt;/li&gt;&lt;li&gt;Drugie miejsce w kategorii &lt;a href="http://imaginecup.com/Competition/mycompetitionportal.aspx?competitionId=44"&gt;Next Generation Web Award&lt;/a&gt;&amp;nbsp; :)&lt;/li&gt;&lt;/ul&gt;Aplikacje można sobie poklikać online &lt;a href="http://rhea-ie.imaginecup2010.net/"&gt;http://rhea-ie.imaginecup2010.net&lt;/a&gt;&amp;nbsp; i obejrzeć sceen cast &lt;a href="http://rhea-ie.imaginecup2010.net/about/"&gt;http://rhea-ie.imaginecup2010.net/about/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Dziękujemy organizatorom i cieszymy się z wyników!&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Pozdrawiam,&lt;br /&gt;Jacek Ciereszko&amp;nbsp; &lt;br /&gt;&lt;span lang="PL" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span lang="PL" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;&amp;nbsp; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-3429201942225716458?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/3429201942225716458/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=3429201942225716458' title='Komentarze (7)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/3429201942225716458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/3429201942225716458'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2010/06/imagine-cup-2010-wyniki.html' title='Imagine Cup 2010 - Wyniki'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-6518573154603749935</id><published>2010-05-29T16:17:00.002+02:00</published><updated>2010-05-29T16:17:46.362+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wssg'/><category scheme='http://www.blogger.com/atom/ns#' term='konferencja'/><title type='text'>UserControls w Silverlight i MVVM [WSSG]</title><content type='html'>&lt;div class="MsoNormal"&gt;Zapraszamy wszystkich chętnych na &lt;a href="http://ms-groups.pl/wssg/7_spotkanie/"&gt;siódme&lt;/a&gt; spotkanie grupy &lt;a href="http://ms-groups.pl/wssg/"&gt;&lt;b&gt;&lt;span style="color: blue;"&gt;Warsaw Silverlight Study Group (WSSG)&lt;/span&gt;&lt;/b&gt;&lt;span style="color: blue;"&gt;.&lt;/span&gt;&lt;/a&gt; Spotkanie rozpocznie się 8 czerwca (wtorek), o godzinie 18:00 w siedzibie firmy Microsoft w Warszawie (al. Jerozolimskie 195A - &lt;a href="http://tiny.pl/hq13h"&gt;&lt;span style="color: blue;"&gt;zobacz na mapie&lt;/span&gt;&lt;/a&gt;). &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div align="center" class="MsoBodyText" style="text-align: center;"&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt;"&gt;&lt;img alt="WSSG logo" border="0" src="http://ms-groups.pl/wssg/PublishingImages/WSSG_logo_110x248.png" style="border: 0px solid;" /&gt;&lt;/span&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="MsoBodyText" style="margin-bottom: 0.0001pt;"&gt;&lt;b&gt;Agenda spotkania&lt;/b&gt;:&lt;br /&gt;18:00 – 19:20 &lt;b&gt;Grzegorz Wiśniewski&lt;/b&gt;&lt;b&gt;:&lt;/b&gt; „Wstęp do tworzenia własnych kontrolek w WPF i Silverlight”;&lt;/div&gt;&lt;div class="MsoBodyText" style="margin-bottom: 0.0001pt;"&gt;19:20 –&amp;nbsp;19:40 Przerwa;&lt;br /&gt;19:40 – 21:00 &lt;b&gt;Michał Korzunowicz&lt;/b&gt;&lt;b&gt;:&lt;/b&gt; „MVVM –&amp;nbsp;Gdzie? Co? I jak? Na podstawie prostej gry typu shooter ”;&lt;/div&gt;&lt;div class="MsoBodyText" style="margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoBodyText"&gt;Wtorkowe spotkanie rozpoczniemy od prezentacji Grzegorza, który już od 8 lat zajmuje się rozwojem komercyjnego oprogramowania.&amp;nbsp;&amp;nbsp; &lt;/div&gt;&lt;div class="MsoBodyText"&gt;Tworzenie kontrolek z wykorzystaniem Windows Forms nastręczało bardzo często dużo problemów szczególnie dla początkujących programistów. Możliwości jakie oferuje WPF i Silverlight otwierają drogę do tworzenia rozwiązań efektowych w sposób efektywny. Grzegorz podczas swojej prezentacji postara się przedstawić jak łatwo można uszczegółowić kontrolkę czy w zależności od potrzeb zaprojektować ją od podstaw.&lt;/div&gt;&lt;div class="MsoBodyText"&gt;&lt;br /&gt;Po przerwie gościć będziemy Michała Korzunowicza, który na co dzień pracuje w firmie Creadhoc, technologią Silverlight interesuję się od 2 lat.&lt;/div&gt;&lt;div class="MsoBodyText"&gt;Z prezentacji Michała dowiemy się co powinno znajdować się w każdej części wzorca i jaka jest ich rola. Zobaczymy jak je ze sobą połączyć i przedstawić dane w widoku przy pomocy Data Bindingu.&lt;/div&gt;&lt;div class="MsoBodyText"&gt;Strona spotkania: &lt;a href="http://ms-groups.pl/wssg/7_spotkanie/"&gt;http://ms-groups.pl/wssg/7_spotkanie/&lt;/a&gt; &lt;/div&gt;&lt;div class="MsoBodyText"&gt;Udział&amp;nbsp;w spotkaniu jest bezpłatny. Wskazana &lt;a href="http://ms-groups.pl/wssg/7_spotkanie/Lists/Rejestracja%20aby%20si%20zarejestrowa%20musisz%20by%20czonkiem/NewForm.aspx"&gt;rejestracja&lt;/a&gt; (&lt;a href="http://ms-groups.pl/wssg/Lists/Oglne/Flat.aspx?RootFolder=%2Fwssg%2FLists%2FOglne%2FProblem%20z%20rejestracj%C4%85&amp;amp;FolderCTID=0x01200200019F51F887692F458C5ADCFD7C8A907D"&gt;tutorial do rejestracji&lt;/a&gt;).&lt;/div&gt;&lt;div class="MsoBodyText"&gt;Zapraszamy!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-6518573154603749935?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/6518573154603749935/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=6518573154603749935' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/6518573154603749935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/6518573154603749935'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2010/05/usercontrols-w-silverlight-i-mvvm-wssg.html' title='UserControls w Silverlight i MVVM [WSSG]'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-8749946923320438881</id><published>2010-05-02T22:24:00.000+02:00</published><updated>2010-05-02T22:24:42.813+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Expression Blend'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 4'/><category scheme='http://www.blogger.com/atom/ns#' term='Expression Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='Behavior'/><title type='text'>Silverlight Center And Scale Behavior</title><content type='html'>W ostatnim &lt;a href="http://jacekciereszko.pl/2010/05/jak-wysrodkowac-i-skalowac-aplikacje.html"&gt;poście &lt;/a&gt;pisałem o tym jak wyśrodkować i skalować aplikację. Tym razem poszedłem o krok dalej i stworzyłem prosty behavior który z łatwością podłączymy do każdej aplikacji i nie musimy modyfikować istniejącego kodu.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Co należy zrobić?&lt;/span&gt;&lt;br /&gt;1. Ściągnąć kod bahaviora:&amp;nbsp; &lt;a href="http://gallery.expression.microsoft.com/en-us/CenterAndScale"&gt;http://gallery.expression.microsoft.com/en-us/CenterAndScale&lt;/a&gt;&lt;br /&gt;2. Podłączyć kod do aplikacji:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;lt;usercontrol .....="" ....="" xmlns:behavior="clr-namespace:CenterAncScaleBehavior;assembly=CenterAncScaleBehavior" xmlns:interaction="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;interaction:interaction.behaviors&amp;gt;&lt;br /&gt;        &amp;lt;behavior:centerancscalebehavior&amp;gt;&lt;br /&gt;    &amp;lt;/behavior:centerancscalebehavior&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;grid&amp;gt; ... &amp;lt;/grid&amp;gt;&lt;br /&gt;&amp;lt;/interaction:interaction.behaviors&amp;gt;&lt;br /&gt;&amp;lt;/usercontrol&amp;gt;&lt;br /&gt;&lt;/pre&gt;3. Gotowe. W 95% aplikacji powinno działać. :]&lt;br /&gt;&lt;br /&gt;Jeżeli używacie Microsoft Expression Blend-a, wystarczy przeciągnąć klasę na aplikację (patrz video). &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Prezentacja, a więc behavior w akcji (66 sekund)&lt;/span&gt;&lt;br /&gt;&lt;object height="525" width="660"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ngyCVrVLZ_4&amp;hl=pl_PL&amp;fs=1&amp;color1=0x006699&amp;color2=0x54abd6&amp;hd=1&amp;border=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/ngyCVrVLZ_4&amp;hl=pl_PL&amp;fs=1&amp;color1=0x006699&amp;color2=0x54abd6&amp;hd=1&amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="660" height="525"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Prosty przykład działania&lt;/span&gt;&lt;br /&gt;Aplikacja bez behaviora:&amp;nbsp; &lt;a href="http://bit.ly/cVinEC"&gt;http://bit.ly/cVinEC&lt;/a&gt;&lt;br /&gt;Aplikacja już z podłączonym bahaviorem: &lt;a href="http://bit.ly/ba8UsI"&gt;http://bit.ly/ba8UsI&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Nie bangla?&lt;/span&gt;&lt;br /&gt;Behavior powinień działać dla więkoszości aplikacji ale niekoniecznie dla wszystkich. Jeśli macie specyficzne ustawienia, stałe rozmiary dla UserControl itp., to bez zmian w aplikacji niestety skalowanie nie zadziała. &lt;br /&gt;&lt;br /&gt;Pozdrawiam,&lt;br /&gt;Jacek Ciereszko&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-8749946923320438881?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/8749946923320438881/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=8749946923320438881' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/8749946923320438881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/8749946923320438881'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2010/05/silverlight-center-and-scale-behavior.html' title='Silverlight Center And Scale Behavior'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-4109062443071329108</id><published>2010-05-02T17:53:00.002+02:00</published><updated>2010-05-02T17:57:01.895+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 4'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight Toolkit'/><title type='text'>Jak wyśrodkować i skalować aplikację przy użyciu ViewBox-a</title><content type='html'>&lt;span xmlns=""&gt;Istnieje wiele sposobów na skalowanie i wyśrodkowanie aplikacji Silverlight w przeglądarce. Zwykle używamy dwóch kontrolek typy Grid do pozycjonowania oraz panela (np. Canvy) do skalowania aplikacji.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;Takie rozwiązanie może wyglądać np. tak:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;lt;UserControl … &amp;gt;&lt;br /&gt;    &amp;lt;Grid x:Name="LayoutRoot" Background="White"&amp;gt;&lt;br /&gt;        &amp;lt;Grid HorizontalAlignment="Center" VerticalAlignment="Center"&amp;gt;&lt;br /&gt;            &amp;lt;Canvas x:Name="scalePanel" VerticalAlignment="Top" HorizontalAlignment="Center"&amp;gt;&lt;br /&gt;                …&lt;br /&gt;            &amp;lt;/Canvas&amp;gt;&lt;br /&gt;        &amp;lt;/Grid&amp;gt;&lt;br /&gt;    &amp;lt;/Grid&amp;gt;&lt;br /&gt;&amp;lt;/UserControl&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;span xmlns=""&gt;Zaprezentowany sposób przy odpowiednim dopieszczeniu działa bez zarzutów ale można prościej. Jak? Otóż używając kontrolki ViewBox która posiada wewnętrzne mechanizmy skalowania zawartości, a umieszczona w Gridzie, zapewni kompleksowe rozwiązanie.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;b&gt;Dobre rozwiązanie:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;lt;UserControl … &amp;gt;&lt;br /&gt;    &amp;lt;Grid x:Name="LayoutRoot" Background="White"&amp;gt;&lt;br /&gt;        &amp;lt;Viewbox&amp;gt;&lt;br /&gt;            ...&lt;br /&gt;        &amp;lt;/Viewbox&amp;gt;&lt;br /&gt;    &amp;lt;/Grid&amp;gt;&lt;br /&gt;&amp;lt;/UserControl&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;h2&gt;&lt;span xmlns=""&gt;Jak znaleźć ViewBoxa?&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;span xmlns=""&gt;Ci którzy używają Silverlight 4 posiadają kontrolkę ViewBox natywnie wbudowaną i dostępna w każdym typie aplikacji. Natomiast dla aplikacji które zostały stworzone w Silverlight 3, ViewBox jest dostępny w pakiecie &lt;a href="http://silverlight.codeplex.com/"&gt;Microsoft Silverlight Toolkit&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;h2&gt;&lt;span xmlns=""&gt;Demo&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;span xmlns=""&gt;Stwórzmy prostą aplikację która będzie zawierać: przycisk, pole tekstowe oraz czerwony kwadrat. Aplikacja będzie posiadała także odpowiedni margines, w postaci: 100 od lewej, 50 od góry, 100 od prawej i 50 od dołu. Na początku aplikacja nie będzie ani skalowana, ani wyśrodkowana:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;lt;UserControl … &amp;gt;&lt;br /&gt;    &amp;lt;Grid x:Name="LayoutRoot"&amp;gt;&lt;br /&gt;        &amp;lt;Grid Margin="100, 50, 100, 20"&amp;gt;&lt;br /&gt;                &amp;lt;StackPanel Orientation="Horizontal"&amp;gt;&lt;br /&gt;                    &amp;lt;Button Width="100" Height="100" Content="test"/&amp;gt;&lt;br /&gt;                    &amp;lt;TextBlock Text="Button" Width="100" Height="100" /&amp;gt;&lt;br /&gt;                    &amp;lt;Rectangle Width="100" Height="100" Fill="Red"/&amp;gt;&lt;br /&gt;                &amp;lt;/StackPanel&amp;gt;&lt;br /&gt;        &amp;lt;/Grid&amp;gt;&lt;br /&gt;    &amp;lt;/Grid&amp;gt; &lt;br /&gt;&amp;lt;/UserControl&amp;gt;&amp;nbsp;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;b&gt;Uruchom demo: &lt;/b&gt;&lt;a href="http://www.wpierdalaj.pl/blog_resources/_SILVERLIGHT4/CenterApp/BezViewBoxa/"&gt;RUN&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;Natomiast jeśli wprowadzimy drobną modyfikację i dodamy kontrolkę ViewBox, otrzymamy pożądany efekt.&lt;/span&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;lt;Grid x:Name="LayoutRoot"&amp;gt;&lt;br /&gt;        &amp;lt;Viewbox&amp;gt;&lt;br /&gt;            &amp;lt;Grid Margin="100, 50, 100, 20"&amp;gt;&lt;br /&gt;                    &amp;lt;StackPanel Orientation="Horizontal"&amp;gt;&lt;br /&gt;                        &amp;lt;Button Width="100" Height="100" Content="test"/&amp;gt;&lt;br /&gt;                        &amp;lt;TextBlock Text="bottom" Width="100" Height="100" /&amp;gt;&lt;br /&gt;                        &amp;lt;Rectangle Width="100" Height="100" Fill="Red"/&amp;gt;&lt;br /&gt;                    &amp;lt;/StackPanel&amp;gt;&lt;br /&gt;            &amp;lt;/Grid&amp;gt;&lt;br /&gt;        &amp;lt;/Viewbox&amp;gt;&lt;br /&gt;    &amp;lt;/Grid&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Uruchom demo&lt;/b&gt;: &lt;a href="http://www.wpierdalaj.pl/blog_resources/_SILVERLIGHT4/CenterApp/ViewBox/"&gt;RUN&lt;/a&gt; (Zmień wielkość okna żeby zobaczyć skalowanie)&lt;br /&gt;&lt;span xmlns=""&gt;&lt;b&gt;Link do źródeł&lt;/b&gt;: &lt;a href="http://www.wpierdalaj.pl/blog_resources/_SILVERLIGHT4/CenterApp/SilverlightCenterApplication.zip"&gt;SilverlightCenterApplication.zip&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;h3&gt;&lt;span xmlns=""&gt;References&lt;/span&gt;&lt;/h3&gt;&lt;ul&gt;&lt;span xmlns=""&gt;&lt;li&gt;ViewBox w Silverlight 3 &lt;a href="http://silverlight.codeplex.com/"&gt;http://silverlight.codeplex.com/&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/span&gt;&lt;/ul&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;Jacek Ciereszko&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-4109062443071329108?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/4109062443071329108/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=4109062443071329108' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/4109062443071329108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/4109062443071329108'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2010/05/jak-wysrodkowac-i-skalowac-aplikacje.html' title='Jak wyśrodkować i skalować aplikację przy użyciu ViewBox-a'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-2380455744339507772</id><published>2010-04-08T23:17:00.000+02:00</published><updated>2010-04-08T23:17:11.062+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wssg'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 4'/><category scheme='http://www.blogger.com/atom/ns#' term='konferencja'/><title type='text'>Windows Phone 7 i PRISM [WSSG]</title><content type='html'>&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Zapraszamy wszystkich chętnych na &lt;a href="http://ms-groups.pl/wssg/6_spotkanie/"&gt;szóste&lt;/a&gt; spotkanie grupy &lt;a href="http://ms-groups.pl/wssg/"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;&lt;b&gt;Warsaw Silverlight Study Group (WSSG)&lt;/b&gt;.&lt;/span&gt;&lt;/a&gt; Spotkanie rozpocznie się 13 kwietnia (wtorek), o godzinie 18:00 w siedzibie firmy Microsoft w Warszawie (al. Jerozolimskie 195A - &lt;a href="http://tiny.pl/hq13h"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;zobacz na mapie&lt;/span&gt;&lt;/a&gt;). &amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;b&gt;Agenda spotkania&lt;/b&gt;:&lt;br /&gt;18:00 – 19:20 &lt;b&gt;Marcin Kruszyński:&lt;/b&gt; "Aplikacje Silverlight na Windows Phone 7";&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;19:20 – 19:40 Przerwa;&lt;br /&gt;19:40 – 21:00 &lt;b&gt;Jan Marowski:&lt;/b&gt; "Navigation Framework w Silverlight 3";&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Wtorkowe spotkanie rozpoczniemy prezentacją Marcina Kruszyńskiego. Marcin na co dzień pracuje jako programista i architekt  w centrum badawczo-rozwojowym w firmie &lt;a href="http://www.comarch.pl/"&gt;Comarch&lt;/a&gt;, CTO sektora ERP. Interesuje się wieloma aspektami platformy .NET oraz specjalizuje w implementacji bogatych interfejsów graficznych aplikacji, w oparciu o WPF i Silverlight. Pasjonat nowych trendów i technologii. Zawodowo technologią Silverlight zajmuje się od połowy 2008 roku. Prowadził warsztaty z Silverlight w ramach &lt;a href="http://ms-groups.pl/kgd.net/"&gt;KGD.NET&lt;/a&gt; w Krakowie.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Marcin opisał swoją sesję następująco: "Umiesz pisać aplikacje w Silverlight? A czy wiesz, że dysponując tą wiedzą możesz łatwo zacząć tworzyć rozwiązania na platformę Windows Phone 7? Hola! - zakrzykną sceptycy. Podobieństwo w tworzeniu aplikacji w oparciu o te same narzędzia, nie oznacza że aplikacje będą takie same! Tak, są różnice. Jakie? O tym opowiemy na prezentacji. Oprócz pewnych ograniczeń i zmian, postaramy się także przybliżyć nowe możliwości wynikające z funkcjonalności samego telefonu.".&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Natomiast po przerwie gościć będziemy Jan Marowskiego. Jan opisał siebie następująco: "Na co dzień zajmuję się tworzeniem oprogramowania dla sektora bankowego, ubezpieczeniowego i telekomunikacyjnego w firmie &lt;a href="http://www.infovidematrix.pl/"&gt;Infovide-Matrix&lt;/a&gt;. Przygodę z Silverlightem rozpocząłem od wersji 2.0 preview 5. Od tego czasu starałem się z różnymi skutkami  zainteresować Silverlightem osoby decyzyjne u mnie w firmie, co zaowocowało aktualnie prowadzonym przeze mnie projektem w Silverlight 3."&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Jan w trakcie swojej prezentacji przedstawi nam mechanizmy Routingu w Silverlight. Będzie to przegląd standardowych mechanizmów, jak i możliwości jaki daje nam framework PRISM.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Strona spotkania: &lt;a href="http://ms-groups.pl/wssg/6_spotkanie"&gt;http://ms-groups.pl/wssg/6_spotkanie&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Udział w spotkaniu jest bezpłatny. Wskazana &lt;a href="http://ms-groups.pl/wssg/6_spotkanie/Lists/Rejestracja%20aby%20si%20zarejestrowa%20musisz%20by%20czonkiem/NewForm.aspx"&gt;rejestracja&lt;/a&gt; (&lt;a href="http://ms-groups.pl/wssg/Lists/Oglne/Flat.aspx?RootFolder=%2fwssg%2fLists%2fOglne%2fProblem%20z%20rejestracj%c4%85&amp;amp;FolderCTID=0x01200200019F51F887692F458C5ADCFD7C8A907D" target="_blank" title="http"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;tutorial do rejestracji&lt;/span&gt;&lt;/a&gt;).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Zapraszamy!&lt;/span&gt;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-2380455744339507772?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/2380455744339507772/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=2380455744339507772' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/2380455744339507772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/2380455744339507772'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2010/04/windows-phone-7-i-prism-wssg.html' title='Windows Phone 7 i PRISM [WSSG]'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-5419149534431534184</id><published>2010-03-15T20:01:00.000+01:00</published><updated>2010-03-15T20:01:03.012+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 4'/><title type='text'>Silverlight 4.0 RC</title><content type='html'>Kilka godzin temu Microsoft wydał nową wersję Silverlighta 4.0 RC :)Wraz z nią pojawiło się także wiele nowości i ułatwień, których nie będę tutaj wymieniał bo jest ich zbyt wiele. Pozwolę sobie tylko polecić Wam bloga Tima Heuera (&lt;a href="http://timheuer.com/blog/archive/2010/03/15/whats-new-in-silverlight-4-rc-mix10.aspx"&gt;http://timheuer.com/blog/archive/2010/03/15/whats-new-in-silverlight-4-rc-mix10.aspx&lt;/a&gt;), a sam oddale się w zgłębiania tego co dostarczyła nam ta nowa wersja :)&lt;br /&gt;&lt;br /&gt;PS. polecam zerknąć na Windows Mobile 7 ;)&lt;br /&gt;&lt;br /&gt;Linki:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://silverlight.net/getstarted/silverlight-4/"&gt;http://silverlight.net/getstarted/silverlight-4/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://timheuer.com/blog/"&gt;http://timheuer.com/blog/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-5419149534431534184?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/5419149534431534184/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=5419149534431534184' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/5419149534431534184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/5419149534431534184'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2010/03/silverlight-40-rc.html' title='Silverlight 4.0 RC'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-1365497913007747614</id><published>2010-03-03T21:49:00.000+01:00</published><updated>2010-03-03T21:49:44.586+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wssg'/><category scheme='http://www.blogger.com/atom/ns#' term='konferencja'/><title type='text'>Piąte spotkanie Warsaw Silverlight Study Group (WSSG)</title><content type='html'>&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Zapraszam wszystkich chętnych na &lt;a href="http://ms-groups.pl/wssg/5_spotkanie"&gt;piąte&lt;/a&gt; spotkanie grupy &lt;a href="http://ms-groups.pl/wssg/"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;&lt;b&gt;Warsaw Silverlight Study Group (WSSG)&lt;/b&gt;.&lt;/span&gt;&lt;/a&gt; Spotkanie rozpocznie się 9 marca (wtorek), o godzinie 18:00 w siedzibie firmy Microsoft w Warszawie (al. Jerozolimskie 195A - &lt;a href="http://tiny.pl/hq13h"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;zobacz na mapie&lt;/span&gt;&lt;/a&gt;). &amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt;"&gt;&lt;img alt="WSSG logo" border="0" src="http://ms-groups.pl/wssg/PublishingImages/WSSG_logo_110x248.png" style="border: 0px solid;" /&gt;&lt;/span&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;b&gt;Agenda spotkania&lt;/b&gt;:&lt;br /&gt;18:00 – 19:20 &lt;b&gt;Bartosz Pampuch:&lt;/b&gt; "Silverlight: Tips &amp;amp; Tricks czyli o czym warto wiedzieć, korzystając z Silverlight";&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;19:20 – 19:40 Przerwa;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;19:40 – 21:00 &lt;b&gt;Arkadiusz Wójcik&lt;/b&gt;: "Prezentacja narzędzi"RadControls for Silverlight" stworzonych przez firmę Telerik";&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Spotkanie rozpoczniemy prezentacją Bartka. Bartek jest dyrektorem centrum badawczo-rozwojowego w firmie Comarch, CTO sektora ERP. Na co dzień kieruje zespołem badawczym rozwijającym platformę do budowy systemów w modelu SaaS oraz grupą realizującą nowoczesne interfejsy oparte o Silverlight i WPF. Jego zespół buduje również aplikacje na Microsoft Surface. Specjalizuje się m.in. w nowoczesnych metodykach prowadzenia projektów informatycznych oraz architekturach systemowych. Od 2007 r. – Microsoft MVP (pierwotnie w kategorii Visual Developer - Team System, aktualnie Visual Developer – Connected System).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Swoją sesję Bartek opisuje następująco: "Gdy zaczynałem zabawę z Silverlight (a wcześniej WPF), nurtowało mnie pytanie – jak zrealizować efekty znane z ekranów menu gier komputerowych. Domyślałem się, że jest to możliwe, choć początkowo zagadnienia te wydawały się trudne w realizacji. Z biegiem czasu poznałem sposoby budowy własnych paneli (w tym animowanych), metody szybszego i prostszego tworzenia animacji, oraz niuanse niektórych kontrolek. Aplikacje stały się znacznie atrakcyjniejsze. Gdy wydawało mi się, że umiem już sporo, zacząłem stosować wzorzec MVVM i nagle okazało się, że moja "wiedza" wywrócona została do góry nogami. Konieczne było wypracowanie nowych zasad połączenia ViewModeli z animacjami i samym Blendem. Po drodze sporo kłopotów sprawiły także Behaviors, problemy z samym Blendem, asynchroniczna natura Silverlight i niektóre błędy tej technologii. Było ciekawie :), a o tym czego się nauczyłem opowiem w trakcie sesji."&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Po przerwie gościć będziemy Arka. Arek jest studentem IV-tego roku Informatyki na Politechnice Warszawskiej. W minione wakacje pracował w firmie Animation Project S.L. na Majorce jako programista ASP.NET oraz WPF. Po powrocie, przez ostatnie 5 miesięcy, współtworzył w technologii Silverlight portal do zarządzania portfelem inwestycyjnym  z wykresami 3D.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Arek w swojej prezentacji przedstawi nam zestaw kontrolek firmy Telerik. Zaprezentuje nam najciekawsze z nich – między innymi wykresy 3D, mapa oraz symulacja "Książki". Ponadto nie zabraknie porównania do darmowych rozwiązań.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Strona spotkania: &lt;a href="http://ms-groups.pl/wssg/5_spotkanie"&gt;http://ms-groups.pl/wssg/5_spotkanie&lt;/a&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Udział w spotkaniu jest bezpłatny. Wskazana &lt;a href="http://ms-groups.pl/wssg/5_spotkanie/Lists/Rejestracja%20aby%20si%20zarejestrowa%20musisz%20by%20czonkiem/NewForm.aspx"&gt;rejestracja&lt;/a&gt; (&lt;a href="http://ms-groups.pl/wssg/Lists/Oglne/Flat.aspx?RootFolder=%2fwssg%2fLists%2fOglne%2fProblem%20z%20rejestracj%c4%85&amp;amp;FolderCTID=0x01200200019F51F887692F458C5ADCFD7C8A907D" target="_blank" title="http"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;tutorial do rejestracji&lt;/span&gt;&lt;/a&gt;).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Zapraszam!&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-1365497913007747614?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/1365497913007747614/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=1365497913007747614' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/1365497913007747614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/1365497913007747614'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2010/03/piate-spotkanie-warsaw-silverlight.html' title='Piąte spotkanie Warsaw Silverlight Study Group (WSSG)'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-7040046945174123503</id><published>2010-02-01T19:04:00.002+01:00</published><updated>2010-02-01T19:06:24.604+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wssg'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 4'/><category scheme='http://www.blogger.com/atom/ns#' term='konferencja'/><title type='text'>Czwarte spotkanie Warsaw Silverlight Study Group (WSSG)</title><content type='html'>&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Zapraszam wszystkich chętnych na &lt;a href="http://ms-groups.pl/wssg/4_spotkanie/"&gt;czwarte&lt;/a&gt;&lt;/span&gt; spotkanie&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt; grupy &lt;a href="http://ms-groups.pl/wssg/"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;&lt;b&gt;Warsaw Silverlight Study Group (WSSG)&lt;/b&gt;.&lt;/span&gt;&lt;/a&gt; Spotkanie rozpocznie się 9 lutego (wtorek), o godzinie 18:00 w siedzibie firmy Microsoft w Warszawie (al. Jerozolimskie 195A - &lt;a href="http://tiny.pl/hq13h"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;zobacz na mapie&lt;/span&gt;&lt;/a&gt;). &amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'Times New Roman','serif'; font-size: 12pt;"&gt;&lt;img alt="WSSG logo" border="0" src="http://ms-groups.pl/wssg/PublishingImages/WSSG_logo_110x248.png" style="border: 0px solid;" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;b&gt;Agenda spotkania&lt;/b&gt;:&lt;br /&gt;18:00 – 19:20 &lt;b&gt;Robert Kosek:&lt;/b&gt; "Prototypowanie aplikacji za pomocą SketchFlow. Microsoft Expreession Studio. Tips&amp;amp;Tricks.";&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;19:20 – 19:40 Przerwa;&lt;br /&gt;19:40 – 21:00 &lt;b&gt;Tomasz Kustra&lt;/b&gt;: "Binding, Convertery oraz moja własna kontrolka w Silverlight 3.0 i 4.0";&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Spotkanie w lutym rozpocznie Robert Kosek. Robert na co dzień pracuje w firmie Datapolis.com na stanowisku RIA Designer/Developer gdzie zajmuje się rozwiązaniami opartymi o technologie Microsoft(.NET/Sharepoint). W trakcie swojej prezentacji przedstawi nam pakiet Microsoft Expression z szczególnym nastawieniem na SketchFlow. Dodatkowo całość będzie uświetniona zestawem ciekawych Tips&amp;amp;Tricków w Silverlightcie.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Po przerwie gościć będziemy Tomasza Kustrę, osobę z 20 letnim doświadczeniem w IT, pracownika firmy CC Sp. z o.o. Warszawa. Tomasz przez lata pracował na różnych stanowiskach i zebrał niesamowity bagaż doświadczeń którymi chętnie podzieli się z nami w czasie prezentacji. Tomasz opowie nam o Bindingu w Silverlight i wszystkich aspektach z tym związanych. Zobaczymy jak powinno się tworzyć Convertery, a także walidować, grupować oraz filtrować dane. Tomasz pokaże także jak stworzyć swoją własną kontrolkę oraz wszelkiego rodzaju Property które pozwolą na swobodne jej używanie w kodzie XAML.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Strona spotkania: &lt;a href="http://ms-groups.pl/wssg/4_spotkanie/"&gt;http://ms-groups.pl/wssg/4_spotkanie/&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Udział w spotkaniu jest bezpłatny. Wskazana &lt;a href="http://ms-groups.pl/wssg/4_spotkanie/Lists/Rejestracja%20aby%20si%20zarejestrowa%20musisz%20by%20czonkiem/NewForm.aspx"&gt;rejestracja&lt;/a&gt; (&lt;a href="http://ms-groups.pl/wssg/Lists/Oglne/Flat.aspx?RootFolder=%2fwssg%2fLists%2fOglne%2fProblem%20z%20rejestracj%c4%85&amp;amp;FolderCTID=0x01200200019F51F887692F458C5ADCFD7C8A907D" target="_blank" title="http"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;tutorial do rejestracji&lt;/span&gt;&lt;/a&gt;).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Zapraszam!&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-7040046945174123503?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/7040046945174123503/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=7040046945174123503' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/7040046945174123503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/7040046945174123503'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2010/02/czwarte-spotkanie-warsaw-silverlight.html' title='Czwarte spotkanie Warsaw Silverlight Study Group (WSSG)'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-2613913859480499497</id><published>2009-11-30T22:03:00.000+01:00</published><updated>2009-11-30T22:03:40.909+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wssg'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 4'/><title type='text'>Trzecie spotkanie grupy Warsaw Silverlight Study Group (WSSG).</title><content type='html'>&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Zapraszam wszystkich chętnych na &lt;a href="http://ms-groups.pl/wssg/3_spotkanie/"&gt;trzecie spotkanie&lt;/a&gt; grupy &lt;a href="http://ms-groups.pl/wssg/"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;&lt;b&gt;Warsaw Silverlight Study Group (WSSG)&lt;/b&gt;.&lt;/span&gt;&lt;/a&gt; Spotkanie rozpocznie się 8 grudnia (wtorek), o godzinie 18:00 w siedzibie firmy Microsoft w Warszawie (al. Jerozolimskie 195A - &lt;a href="http://tiny.pl/hq13h"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;zobacz na mapie&lt;/span&gt;&lt;/a&gt;). &amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_HHm0WsNFjPo/SuNhashUDII/AAAAAAAAJgw/bTAocKBAams/s1600-h/WSSG_logo_110x248.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5396263889775365250" src="http://4.bp.blogspot.com/_HHm0WsNFjPo/SuNhashUDII/AAAAAAAAJgw/bTAocKBAams/s400/WSSG_logo_110x248.png" style="cursor: pointer; display: block; height: 110px; margin: 0px auto 10px; text-align: center; width: 247px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;b&gt;Agenda spotkania&lt;/b&gt;:&lt;br /&gt;18:00 – 19:20 &lt;b&gt;Bartosz Lipiński:&lt;/b&gt; "WCF RIA Services - Aplikacje biznesowe zorientowane na zasoby";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;19:20 – 19:40 Przerwa;&lt;br /&gt;19:40 – 21:00 &lt;b&gt;Cezary Suchowolec&lt;/b&gt;: "Najciekawsze nowości w Silverlight 4 Beta";&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Grudniowe spotkanie rozpoczniemy od tematu "WCF RIA Services - Aplikacje biznesowe zorientowane na zasoby" o którym opowie nam &lt;b&gt;Bartosz Lipiński&lt;/b&gt;. W czasie tej sesji zobaczymy między innymi jak zacząć pracę z RIA Services, plusy i minusy tego rozwiązania oraz jak używać tej technologii w aplikacjach biznesowych.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Druga część spotkania będzie w całości poświęcona nowościom w Silverlight 4 które zaprezentuje nam  &lt;b&gt;Cezary Suchowolec&lt;/b&gt;. Sesja ta to esencja ze wszystkich nowości jakie niesie ze sobą nowy Silverlight 4 w wersji Beta. Dzięki kilku przydatnym demom, zobaczymy jak je używać oraz jak je zastosować w już działających aplikacjach.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Strona spotkania: &lt;a href="http://ms-groups.pl/wssg/3_spotkanie/"&gt;http://ms-groups.pl/wssg/3_spotkanie/&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Udział w spotkaniu jest bezpłatny. Wskazana &lt;a href="http://ms-groups.pl/wssg/3_spotkanie/Lists/Rejestracja/NewForm.aspx"&gt;rejestracja&lt;/a&gt; (&lt;a href="http://ms-groups.pl/wssg/Lists/Oglne/Flat.aspx?RootFolder=%2fwssg%2fLists%2fOglne%2fProblem%20z%20rejestracj%c4%85&amp;amp;FolderCTID=0x01200200019F51F887692F458C5ADCFD7C8A907D" target="_blank" title="http"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;tutorial do rejestracji&lt;/span&gt;&lt;/a&gt;).&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Zapraszam!&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-2613913859480499497?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/2613913859480499497/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=2613913859480499497' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/2613913859480499497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/2613913859480499497'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2009/11/trzecie-spotkanie-grupy-warsaw.html' title='Trzecie spotkanie grupy Warsaw Silverlight Study Group (WSSG).'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_HHm0WsNFjPo/SuNhashUDII/AAAAAAAAJgw/bTAocKBAams/s72-c/WSSG_logo_110x248.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-5120288713492117826</id><published>2009-11-18T23:48:00.006+01:00</published><updated>2009-12-10T17:54:00.430+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Out Of Browser'/><category scheme='http://www.blogger.com/atom/ns#' term='UserControl'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 4'/><category scheme='http://www.blogger.com/atom/ns#' term='OOB'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>[Silverlight 4 nowości] WebBrowser</title><content type='html'>Kilka godzin temu pojawiła się nowa wersja Silverlighta 4, a wraz z nią setki nowości (tak, tak, nie przesadzam.. setki!!! &lt;span style="font-family: Wingdings;"&gt;J&lt;/span&gt; ). Te najważniejsze znajdziecie chociażby w &lt;a href="http://windowshosting.pl/Silverlight.4.beta.przeglad.nowosci.ktore.zdetronizuja.Flasha"&gt;artykule Bartłomieja Zassa&lt;/a&gt; czy też na blogu &lt;a href="http://timheuer.com/blog/archive/2009/11/18/whats-new-in-silverlight-4-complete-guide-new-features.aspx"&gt;Tim'a&lt;/a&gt; lub &lt;a href="http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/default.aspx"&gt;Mike'a.&lt;/a&gt; Ja swoją przygodę rozpoczynam od kontrolki WebBrowser, a więc czegoś co pozwoli mi  wreszcie na wyświetlenie kodu html w aplikacji Silverlight :]&lt;br /&gt;&lt;br /&gt;Niestety nie wszystko tak pięknie działa jak byśmy mogli sobie to wymarzyć i już na początku zobaczymy, że kontrolka ta działa tylko gdy uruchamiamy aplikację jako "zainstalowaną lokalnie", czyli OutOfBrowser (OOB) i dodatkowo aplikacji powinna mieć włączony tryb działania z pełnymi uprawnieniami (to również nowości w Silverlight 4) jeśli chcemy oglądać strony które nie należą do nas (cross-domain-policy). Mimo to, kontrolka działa, a kod z niej wygenerowany wygląda jak z przeglądarki :)&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Demo&lt;/h2&gt;Zaczynamy od instalacji Silverlight 4 (&lt;a href="http://silverlight.net/getstarted/silverlight-4-beta/"&gt;http://silverlight.net/getstarted/silverlight-4-beta/&lt;/a&gt; ), a więc pobieramy Silverlight 4 Tools for Visual Studio 2010  i instalujemy (zakładam że macie już Visual Studio 2010 Beta 2 - &lt;a href="http://msdn.microsoft.com/pl-pl/vstudio/dd582936%28en-us%29.aspx"&gt;download&lt;/a&gt;). Po instalacji tworzymy nowy projekt Silverlight i w momencie zapytania o wygenerowanie projektu Web, wybieramy z listy Silverlight 4 (patrz rysunek).&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_HHm0WsNFjPo/SwR6DjoiTII/AAAAAAAAJhg/MQY3J5Qezo8/s1600/NewProject.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5405579654274894978" src="http://3.bp.blogspot.com/_HHm0WsNFjPo/SwR6DjoiTII/AAAAAAAAJhg/MQY3J5Qezo8/s400/NewProject.png" style="cursor: pointer; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;   &lt;br /&gt;&lt;/div&gt;W nowym Visual Studio 2010 + Silverlight 4 mamy kolejną nowość w postaci pełnego edytora xaml-a, a więc Blend 3 nie będzie już nam aż tak potrzebny :]&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;WebBrowser&lt;br /&gt;&lt;/h2&gt;Dodajemy w XAML kontrolkę WebBrowser oraz nazwę, tak abyśmy mogli odwołać się do niej z code-behind. Np. w ten sposób:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;lt;UserControl x:Class="SilverlightApplication1.MainPage"&lt;br /&gt;   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt;   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt;   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"&lt;br /&gt;   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"&lt;br /&gt;   mc:Ignorable="d"&lt;br /&gt;   d:DesignHeight="300" d:DesignWidth="400"&amp;gt;&lt;br /&gt;   &amp;lt;Grid x:Name="LayoutRoot" Background="White"&amp;gt;&lt;br /&gt;      &amp;lt;WebBrowser x:Name="webBrowser" /&amp;gt;&lt;br /&gt;   &amp;lt;/Grid&amp;gt;&lt;br /&gt;&amp;lt;/UserControl&amp;gt;&lt;br /&gt;&lt;/pre&gt;Następnie w code-behind dodajemy ładowanie adresu:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;public MainPage()&lt;br /&gt;{&lt;br /&gt;   InitializeComponent();&lt;br /&gt;   this.Loaded += (o, e) =&amp;gt; { webBrowser.Navigate(new Uri("http://microsoft.com", UriKind.Absolute)); };&lt;br /&gt;}&lt;/pre&gt;Ostatnim krokiem jest włączenie opcji instalacji aplikacji (OOB) oraz włączenie potrzeby użycia większych uprawnień. Jeżeli nie włączymy zwiększenia  uprawnień dla naszej aplikacji, będziemy mogli oglądać tylko strony które mają ustawiony dla nas cross-domain-policy lub strony wygenerowane z naszego kodu html (a więc poprzez opcję NavigateString, gdzie parametrem jest kod html).&lt;br /&gt;&lt;br /&gt;W celu włączenia wszystkiego, klikamy prawym na projekcie Silverlightowym i wybieramy Properites:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_HHm0WsNFjPo/SwR6D2hI8aI/AAAAAAAAJho/h1PrdygQCl8/s1600/OOB.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5405579659344146850" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/SwR6D2hI8aI/AAAAAAAAJho/h1PrdygQCl8/s400/OOB.png" style="cursor: pointer; display: block; height: 325px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_HHm0WsNFjPo/SwR6EXWWj7I/AAAAAAAAJiA/HhFrJiGrZnA/s1600/ElevatedTrust.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5405579668157271986" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/SwR6EXWWj7I/AAAAAAAAJiA/HhFrJiGrZnA/s400/ElevatedTrust.png" style="cursor: pointer; display: block; height: 400px; margin: 0px auto 10px; text-align: center; width: 328px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;h2&gt;Run and Fun&lt;br /&gt;&lt;/h2&gt;Jeśli wszystko się kompiluje, jesteśmy gotowi aby sprawdzić działanie naszej przeglądarki. Uruchamiamy aplikację i klikamy prawym klawiszem myszki gdziekolwiek. Z otwartego menu wybieramy opcję "Install …. onto this computer "&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_HHm0WsNFjPo/SwR6EIwNEHI/AAAAAAAAJh4/6HZ1C21h2CY/s1600/InstallOOB.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5405579664239169650" src="http://4.bp.blogspot.com/_HHm0WsNFjPo/SwR6EIwNEHI/AAAAAAAAJh4/6HZ1C21h2CY/s400/InstallOOB.png" style="cursor: pointer; display: block; height: 65px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;   &lt;br /&gt;&lt;/div&gt;A następnie w nowym oknie opcję "Install". Zwróćcie uwagę, że skoro zaznaczyliśmy opcję potrzeby używania dodatkowych uprawnień, użytkownik otrzymuje o tym informację przed instalacją (patrz rysunek).&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_HHm0WsNFjPo/SwR6DwyAEHI/AAAAAAAAJhw/GE5KvT_Lv24/s1600/InstallOOB2.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5405579657804255346" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/SwR6DwyAEHI/AAAAAAAAJhw/GE5KvT_Lv24/s400/InstallOOB2.png" style="cursor: pointer; display: block; height: 278px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;   &lt;br /&gt;&lt;/div&gt;Kiedy aplikacja zainstalowana lokalnie uruchomi się, powinniśmy zobaczyć działającą stronę internetową wewnątrz naszej aplikacji Silverlight.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_HHm0WsNFjPo/SwR60MjAihI/AAAAAAAAJiQ/b2elFz8ATyY/s1600/AplikacjaOOB.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5405580489891285522" src="http://3.bp.blogspot.com/_HHm0WsNFjPo/SwR60MjAihI/AAAAAAAAJiQ/b2elFz8ATyY/s400/AplikacjaOOB.png" style="cursor: pointer; display: block; height: 294px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Pod prawym klawiszem myszki będziemy mieli menu prosto z przeglądarki, a nie z aplikacji Silverlight. Co fajniejsze, jeśli wejdziemy np. na &lt;a href="http://youtube.com/"&gt;http://youtube.com&lt;/a&gt;, zobaczymy że aplikacje Flash, czy też Silvelright również działają.&lt;br /&gt;&lt;br /&gt;PS. W ramach zabawy próbowałem otworzyć moją aplikację Silverlight w aplikacji Silverlight, ale niestety, a raczej i dobrze!, Silverlight nie pozwolił zainstalować się ponownie z samego siebie. Aplikacja wykryła że jest zainstalowana. ;]&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Moje demo&lt;br /&gt;&lt;/h2&gt;W ramach zabawy stworzyłem swoją mini przeglądarkę dostępną pod poniższym adresem (pamiętajcie o potrzebie jej &lt;span style="font-weight: bold;"&gt;zainstalowania &lt;/span&gt;przed użyciem):&lt;br /&gt;&lt;a href="http://www.wpierdalaj.pl/blog_resources/_SILVERLIGHT4/WebBrowserSL/"&gt;Run demo&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_HHm0WsNFjPo/SwR6z_xDJ3I/AAAAAAAAJiI/P9KrnmKak0M/s1600/AplikacjaOOB_demo.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5405580486460516210" src="http://1.bp.blogspot.com/_HHm0WsNFjPo/SwR6z_xDJ3I/AAAAAAAAJiI/P9KrnmKak0M/s400/AplikacjaOOB_demo.png" style="cursor: pointer; display: block; height: 313px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;   &lt;br /&gt;&lt;/div&gt;Przycisk "Przejdź" otwiera stronę spod wpisanego adresu, a "Hello World" generuje stronę z kodu html podanego jako string. Okno jest podzielone na dwie części, lewa jest to kontrolka WebBrowser która wyświetla stronę html, a prawa to Rectangle który jest malowany nowym typem brusha, "&lt;b&gt;HtmlBrush&lt;/b&gt;". W momencie załadowania się strony, na Rectangle wywołuję metodę "Redraw()" i maluje wszystkim co znajduje się w kontrolce WebBrowser. Możemy także go odmalować klikając przycisk "Odmaluj".&lt;br /&gt;&lt;br /&gt;Jak zapewne sami zauważyliście, próbowałem zrobić coś z Projection, niestety kontrolka WebBrowser sama poddaje się tym operacjom, ale już wyświetlona zawartość jest normalnie odwzorowana. A szkoda, już myślałem że będę mógł czytać sobie bloga do góry nogami :D&lt;br /&gt;&lt;br /&gt;Kod źródłowy do dema:&lt;br /&gt;&lt;a href="http://www.wpierdalaj.pl/blog_resources/_SILVERLIGHT4/WebBrowserSL/WebBrowserDemo.zip"&gt;WebBrowserDemo.zip&lt;/a&gt;&lt;br /&gt;Słowem zakończenia, chciałem tylko podkreślić że wymienione funkcjonalności to nie wszystko. W internecie już możemy się doszukać przykładów z odwołaniem do kodu javascript i na odwrót, a więc całkiem pokaźny zbiór nowych możliwości.&lt;br /&gt;&lt;br /&gt;Pozdrawiam i lecę do innych nowinek.. :]&lt;br /&gt;&lt;br /&gt;Jacek Ciereszko&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-5120288713492117826?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/5120288713492117826/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=5120288713492117826' title='Komentarze (3)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/5120288713492117826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/5120288713492117826'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2009/11/silverlight-4-nowosci-webbrowser.html' title='[Silverlight 4 nowości] WebBrowser'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_HHm0WsNFjPo/SwR6DjoiTII/AAAAAAAAJhg/MQY3J5Qezo8/s72-c/NewProject.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-2751298081169391393</id><published>2009-11-09T22:22:00.005+01:00</published><updated>2009-11-09T22:30:15.450+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wssg'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight 3'/><category scheme='http://www.blogger.com/atom/ns#' term='konferencja'/><title type='text'>Warsaw Silverlight Study Group (WSSG)</title><content type='html'>Nie tak dawno temu, bo 22. październik odbyło się pierwsze spotkanie grupy Warsaw Silverlight Study Group (WSSG). Dlatego też chciałbym podziękować wszystkim uczestnikom za tak liczne przybycie i prelegentom (Bartłomiej Zass i Michał Żyliński) za świetne prezentacje!&lt;br /&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HHm0WsNFjPo/SviIqESPsZI/AAAAAAAAJhA/wjvZnEwbca0/s1600-h/DSCF1207.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/SviIqESPsZI/AAAAAAAAJhA/wjvZnEwbca0/s400/DSCF1207.JPG" alt="" id="BLOGGER_PHOTO_ID_5402218009317061010" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;p&gt;Na spotkanie przybyło około 30 osób, co jest niesamowitym wynikiem, a mam nadzieje że będzie nas coraz więcej. Do grupy jak dotychczas zapisało się już prawie 50 osób :)&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span xmlns=""&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HHm0WsNFjPo/SviIqQRZexI/AAAAAAAAJhI/U43hXQr9bgc/s1600-h/DSCN4376.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_HHm0WsNFjPo/SviIqQRZexI/AAAAAAAAJhI/U43hXQr9bgc/s400/DSCN4376.JPG" alt="" id="BLOGGER_PHOTO_ID_5402218012534733586" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HHm0WsNFjPo/SviIqyiFXcI/AAAAAAAAJhQ/tfMSMUKf8Bg/s1600-h/DSCN4547.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_HHm0WsNFjPo/SviIqyiFXcI/AAAAAAAAJhQ/tfMSMUKf8Bg/s400/DSCN4547.JPG" alt="" id="BLOGGER_PHOTO_ID_5402218021731524034" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;p&gt;Podziękowania należą się także naszemu sponsorowi, firmie Microsoft za udostępnienie sali i obdarowanie gadżetami, które będą systematycznie trafiać w ręce uczestników kolejnych spotkań.&lt;span xmlns=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span xmlns=""&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HHm0WsNFjPo/SPC1BVmBhBI/AAAAAAAAHFw/FL_CesiolbY/s1600-h/LogoMicrosoft.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_HHm0WsNFjPo/SPC1BVmBhBI/AAAAAAAAHFw/FL_CesiolbY/s400/LogoMicrosoft.jpg" alt="" id="BLOGGER_PHOTO_ID_5255899799722492946" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;Na zakończenie przypomnę tylko o kolejnym spotkaniu, które odbędzie się już jutro (10 listopad 2009) o godzinie 18:00. Szczegółowa agenda oraz rejestracja dostępna jest pod adresem &lt;a href="http://ms-groups.pl/wssg/2_spotkanie/default.aspx?InstanceID=1"&gt;http://ms-groups.pl/wssg/2_spotkanie/default.aspx?InstanceID=1&lt;/a&gt;&lt;br /&gt;  &lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HHm0WsNFjPo/SviIrBIoaMI/AAAAAAAAJhY/hsf9qOkyHVg/s1600-h/DSCN4672.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_HHm0WsNFjPo/SviIrBIoaMI/AAAAAAAAJhY/hsf9qOkyHVg/s400/DSCN4672.JPG" alt="" id="BLOGGER_PHOTO_ID_5402218025651300546" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;p&gt;Zapraszam!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Jacek Ciereszko&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-2751298081169391393?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/2751298081169391393/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=2751298081169391393' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/2751298081169391393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/2751298081169391393'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2009/11/warsaw-silverlight-study-group-wssg.html' title='Warsaw Silverlight Study Group (WSSG)'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_HHm0WsNFjPo/SviIqESPsZI/AAAAAAAAJhA/wjvZnEwbca0/s72-c/DSCF1207.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-6915794873675733047</id><published>2009-10-24T22:17:00.003+02:00</published><updated>2009-10-24T22:24:35.563+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wssg'/><category scheme='http://www.blogger.com/atom/ns#' term='konferencja'/><title type='text'>Drugie spotkanie Warsaw Silverlight Study Group</title><content type='html'>&lt;!--  /* Font Definitions */  @font-face  {font-family:"Cambria Math";  panose-1:2 4 5 3 5 4 6 3 2 4;  mso-font-charset:238;  mso-generic-font-family:roman;  mso-font-pitch:variable;  mso-font-signature:-1610611985 1107304683 0 0 415 0;} @font-face  {font-family:Calibri;  panose-1:2 15 5 2 2 2 4 3 2 4;  mso-font-charset:238;  mso-generic-font-family:swiss;  mso-font-pitch:variable;  mso-font-signature:-520092929 1073786111 9 0 415 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal  {mso-style-unhide:no;  mso-style-qformat:yes;  mso-style-parent:"";  margin-top:0cm;  margin-right:0cm;  margin-bottom:10.0pt;  margin-left:0cm;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Calibri","sans-serif";  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:Calibri;  mso-fareast-theme-font:minor-latin;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;  mso-bidi-font-family:"Times New Roman";  mso-bidi-theme-font:minor-bidi;  mso-fareast-language:EN-US;} a:link, span.MsoHyperlink  {mso-style-priority:99;  color:blue;  text-decoration:underline;  text-underline:single;} a:visited, span.MsoHyperlinkFollowed  {mso-style-noshow:yes;  mso-style-priority:99;  color:purple;  mso-themecolor:followedhyperlink;  text-decoration:underline;  text-underline:single;} .MsoChpDefault  {mso-style-type:export-only;  mso-default-props:yes;  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:Calibri;  mso-fareast-theme-font:minor-latin;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;  mso-bidi-font-family:"Times New Roman";  mso-bidi-theme-font:minor-bidi;  mso-fareast-language:EN-US;} .MsoPapDefault  {mso-style-type:export-only;  margin-bottom:10.0pt;  line-height:115%;} @page Section1  {size:612.0pt 792.0pt;  margin:70.85pt 70.85pt 70.85pt 70.85pt;  mso-header-margin:35.4pt;  mso-footer-margin:35.4pt;  mso-paper-source:0;} div.Section1  {page:Section1;} --&gt; Zapraszam wszystkich chętnych na &lt;a href="http://ms-groups.pl/wssg/2_spotkanie/default.aspx?InstanceID=1"&gt;drugie spotkanie&lt;/a&gt; grupy &lt;a href="http://ms-groups.pl/wssg/"&gt;Warsaw Silverlight Study Group&lt;/a&gt; (WSSG). Spotkanie rozpocznie się 10 listopada (wtorek), o godzinie 18:00 w siedzibie firmy Microsoft w Warszawie (al. Jerozolimskie 195A - &lt;a href="http://tiny.pl/hq13h"&gt;zobacz na mapie&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HHm0WsNFjPo/SuNhashUDII/AAAAAAAAJgw/bTAocKBAams/s1600-h/WSSG_logo_110x248.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 247px; height: 110px;" src="http://4.bp.blogspot.com/_HHm0WsNFjPo/SuNhashUDII/AAAAAAAAJgw/bTAocKBAams/s400/WSSG_logo_110x248.png" alt="" id="BLOGGER_PHOTO_ID_5396263889775365250" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;!--  /* Font Definitions */  @font-face  {font-family:"Cambria Math";  panose-1:2 4 5 3 5 4 6 3 2 4;  mso-font-charset:238;  mso-generic-font-family:roman;  mso-font-pitch:variable;  mso-font-signature:-1610611985 1107304683 0 0 415 0;} @font-face  {font-family:Calibri;  panose-1:2 15 5 2 2 2 4 3 2 4;  mso-font-charset:238;  mso-generic-font-family:swiss;  mso-font-pitch:variable;  mso-font-signature:-520092929 1073786111 9 0 415 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal  {mso-style-unhide:no;  mso-style-qformat:yes;  mso-style-parent:"";  margin-top:0cm;  margin-right:0cm;  margin-bottom:10.0pt;  margin-left:0cm;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Calibri","sans-serif";  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:Calibri;  mso-fareast-theme-font:minor-latin;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;  mso-bidi-font-family:"Times New Roman";  mso-bidi-theme-font:minor-bidi;  mso-fareast-language:EN-US;} .MsoChpDefault  {mso-style-type:export-only;  mso-default-props:yes;  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:Calibri;  mso-fareast-theme-font:minor-latin;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;  mso-bidi-font-family:"Times New Roman";  mso-bidi-theme-font:minor-bidi;  mso-fareast-language:EN-US;} .MsoPapDefault  {mso-style-type:export-only;  margin-bottom:10.0pt;  line-height:115%;} @page Section1  {size:612.0pt 792.0pt;  margin:70.85pt 70.85pt 70.85pt 70.85pt;  mso-header-margin:35.4pt;  mso-footer-margin:35.4pt;  mso-paper-source:0;} div.Section1  {page:Section1;} --&gt;&lt;span style="font-weight: bold;"&gt;   Agenda spotkania&lt;/span&gt;:&lt;br /&gt;18:00 – 19:30 &lt;span style="font-weight: bold;"&gt;Jakub Jałbrzykowski&lt;/span&gt;: „Silverlight – przyszłość aplikacji biznesowych”; &lt;br /&gt;19:30 – 19:45 Przerwa;&lt;br /&gt;19:45 – 21:00 &lt;span style="font-weight: bold;"&gt;Jacek Ciereszko&lt;/span&gt;: „Wstęp do Silverlighta”;&lt;br /&gt;&lt;br /&gt;&lt;!--  /* Font Definitions */  @font-face  {font-family:"Cambria Math";  panose-1:2 4 5 3 5 4 6 3 2 4;  mso-font-charset:238;  mso-generic-font-family:roman;  mso-font-pitch:variable;  mso-font-signature:-1610611985 1107304683 0 0 415 0;} @font-face  {font-family:Calibri;  panose-1:2 15 5 2 2 2 4 3 2 4;  mso-font-charset:238;  mso-generic-font-family:swiss;  mso-font-pitch:variable;  mso-font-signature:-520092929 1073786111 9 0 415 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal  {mso-style-unhide:no;  mso-style-qformat:yes;  mso-style-parent:"";  margin-top:0cm;  margin-right:0cm;  margin-bottom:10.0pt;  margin-left:0cm;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Calibri","sans-serif";  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:Calibri;  mso-fareast-theme-font:minor-latin;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;  mso-bidi-font-family:"Times New Roman";  mso-bidi-theme-font:minor-bidi;  mso-fareast-language:EN-US;} a:link, span.MsoHyperlink  {mso-style-priority:99;  color:blue;  text-decoration:underline;  text-underline:single;} a:visited, span.MsoHyperlinkFollowed  {mso-style-noshow:yes;  mso-style-priority:99;  color:purple;  mso-themecolor:followedhyperlink;  text-decoration:underline;  text-underline:single;} .MsoChpDefault  {mso-style-type:export-only;  mso-default-props:yes;  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:Calibri;  mso-fareast-theme-font:minor-latin;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;  mso-bidi-font-family:"Times New Roman";  mso-bidi-theme-font:minor-bidi;  mso-fareast-language:EN-US;} .MsoPapDefault  {mso-style-type:export-only;  margin-bottom:10.0pt;  line-height:115%;} @page Section1  {size:612.0pt 792.0pt;  margin:70.85pt 70.85pt 70.85pt 70.85pt;  mso-header-margin:35.4pt;  mso-footer-margin:35.4pt;  mso-paper-source:0;} div.Section1  {page:Section1;} --&gt;   Spotkanie rozpoczniemy prezentacją Jakuba Jałbrzykowskiego na temat zastosowania Silverlighta w aplikacjach biznesowych. Sesja Kuby pochodzi prosto z tegorocznej konferencji &lt;a href="http://mts2009.pl/po-konferencji/podsumowanie"&gt;MTS 2009&lt;/a&gt;, na której to cieszyła się największą popularnością wśród wszystkich przedstawionych prezentacji. &lt;br /&gt;&lt;br /&gt;Po przerwie, zobaczymy prezentację o tym jak zacząć pracę z Silverlightem. Oprócz omówienia technologii i stosowanych narzędzi, przyjrzymy się także pisaniu aplikacji Silverlight w Eclipse oraz dowiemy się jak zrobić deployment aplikacji. &lt;br /&gt;&lt;br /&gt;Strona spotkania: &lt;a href="http://ms-groups.pl/wssg/2_spotkanie/default.aspx?InstanceID=1"&gt;http://ms-groups.pl/wssg/2_spotkanie/default.aspx?InstanceID=1 &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Udział w spotkaniu jest bezpłatny. Wskazana &lt;a href="http://ms-groups.pl/wssg/2_spotkanie/Lists/Rejestracja/NewForm.aspx"&gt;rejestracja &lt;/a&gt;(&lt;a href="http://ms-groups.pl/wssg/Lists/Oglne/Flat.aspx?RootFolder=%2fwssg%2fLists%2fOglne%2fProblem%20z%20rejestracj%c4%85&amp;amp;FolderCTID=0x01200200019F51F887692F458C5ADCFD7C8A907D"&gt;tutorial do rejestracji&lt;/a&gt;). &lt;br /&gt;Zapraszam!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-6915794873675733047?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/6915794873675733047/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=6915794873675733047' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/6915794873675733047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/6915794873675733047'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2009/10/drugie-spotkanie-warsaw-silverlight.html' title='Drugie spotkanie Warsaw Silverlight Study Group'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_HHm0WsNFjPo/SuNhashUDII/AAAAAAAAJgw/bTAocKBAams/s72-c/WSSG_logo_110x248.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-5693862327157227922</id><published>2009-10-03T01:15:00.004+02:00</published><updated>2009-10-03T14:24:47.443+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Expression Blend'/><category scheme='http://www.blogger.com/atom/ns#' term='wssg'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight 3'/><category scheme='http://www.blogger.com/atom/ns#' term='konferencja'/><title type='text'>Pierwsze spotkanie grupy Warsaw Silverlight Study Group (WSSG)</title><content type='html'>Tak, tak.. stało się, po kilku miesiącach przygotowań wreszcie rusza &lt;a href="http://ms-groups.pl/wssg/"&gt;&lt;strong&gt;Warszawska Grupa Silverlightowa&lt;/strong&gt;&lt;/a&gt;!!!&lt;br /&gt;&lt;span xmlns=""&gt;&lt;p style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ms-groups.pl/wssg/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 247px; height: 110px;" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/SsaKB132lGI/AAAAAAAAJec/gwykibylE2M/s400/WSSG_logo_110x248.png" alt="" id="BLOGGER_PHOTO_ID_5388145768441222242" border="0" /&gt;&lt;/a&gt;   &lt;/p&gt;&lt;p&gt;Dlatego też w imieniu własnym oraz prelegentów zapraszam wszystkich chętnych na pierwsze spotkanie grupy &lt;strong&gt;&lt;a href="http://ms-groups.pl/wssg/"&gt;Warsaw Silverlight Study Group&lt;/a&gt; (WSSG)&lt;/strong&gt;. Spotkanie rozpocznie się w środę, &lt;strong&gt;21 października&lt;/strong&gt;, o godzinie &lt;strong&gt;18:00&lt;/strong&gt; &lt;strong&gt;w siedzibie&lt;/strong&gt; &lt;strong&gt;firmy&lt;/strong&gt; &lt;strong&gt;Microsoft&lt;/strong&gt; w &lt;strong&gt;Warszawie&lt;/strong&gt; (al. Jerozolimskie 195A - &lt;a href="http://tiny.pl/hq13h"&gt;zobacz na mapie&lt;/a&gt;). Udział w spotkaniu jest bezpłatny.&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;span xmlns=""&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HHm0WsNFjPo/SsdAE80NYWI/AAAAAAAAJes/D_Q6wyaGJrA/s1600-h/Kalendarz1Spotkanie.png"&gt;&lt;img style="margin: 0px auto 10px; text-align: left; cursor: pointer; width: 178px; height: 170px;" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/SsdAE80NYWI/AAAAAAAAJes/D_Q6wyaGJrA/s400/Kalendarz1Spotkanie.png" alt="" id="BLOGGER_PHOTO_ID_5388345932960850274" border="0" /&gt;&lt;/a&gt;  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HHm0WsNFjPo/SsdAFOT1kVI/AAAAAAAAJe0/vbtBKkFxY4Q/s1600-h/GodzinaNa1Spotkanie.png"&gt;&lt;img style="margin: 0px auto 10px; text-align: left; cursor: pointer; width: 157px; height: 182px;" src="http://3.bp.blogspot.com/_HHm0WsNFjPo/SsdAFOT1kVI/AAAAAAAAJe0/vbtBKkFxY4Q/s400/GodzinaNa1Spotkanie.png" alt="" id="BLOGGER_PHOTO_ID_5388345937656910162" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;h2&gt;Agenda&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Tematy które poruszymy na pierwszym spotkaniu to między innymi:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Uroczyste powitanie nowych członków w nowej grupie;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Następnie &lt;strong&gt;Bartłomiej Zass&lt;/strong&gt; opowie nam o nowościach w Silverlight 3.0;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A po przerwie &lt;strong&gt;Michał Żyliński&lt;/strong&gt; pokaże sesję pod tytułem "Blend 3 w walce z kryzysem".&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Zapowiada się porządna dawka wiedzy o Silverlightcie zaprezentowana przez jednych z najlepszych prelegentów z firmy &lt;strong&gt;Microsoft&lt;/strong&gt;!!!&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Linki do spotkania&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="http://ms-groups.pl/wssg/Lists/Kalendarz/DispForm.aspx?ID=4"&gt;Szczegółowa agenda 1. spotkania WSSG&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://ms-groups.pl/wssg/1_spotkanie/Lists/1%20spotkanie%20WSSG/NewForm.aspx"&gt;Nieobowiązkowa choć zalecana rejestracja&lt;/a&gt; (bez rejestracji nie będę w stanie Was powiadomić o ewentualnych zmianach).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;Rejestracja na stronie grupy&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Ponieważ pierwsze kroki z rejestracją w grupie mogą być uciążliwe, a zwykle są, dlatego też opiszę szybciutko dwustopniowy proces przez który nowe osoby muszą przejść.&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Na początku należy się zarejestrować na stronie głównej (&lt;a href="http://ms-groups.pl/"&gt;http://ms-groups.pl&lt;/a&gt;), czyli założyć konto tu -&amp;gt; &lt;a href="http://ms-groups.pl/_layouts/MSG/Registration/Register.aspx"&gt;link&lt;/a&gt;. Podajemy dane, zatwierdzamy i czekamy na link aktywacyjny w skrzynce e-mail. &lt;em&gt;Uwaga, podane hasło musi nie być łatwe do złamania, przyszykujcie jakieś dłuższe, najlepiej z przynajmniej jednym znakiem nie z alfabetu.&lt;br /&gt;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Następnie kiedy konto zostanie potwierdzone poprzez kliknięcie linka aktywacyjnego w otrzymany e-mailu, można przejść do &lt;a href="http://ms-groups.pl/wssg/Lists/Rejestracja/NewForm.aspx"&gt;zapisania się do grupy WSSG&lt;/a&gt;. Strona &lt;a href="http://ms-groups.pl/"&gt;http://ms-groups.pl&lt;/a&gt; skupia wiele grup społecznościowych (WSSG jest tylko jedną z wielu), dlatego też proces musi być tak rozbity.&lt;br /&gt;&lt;/div&gt;&lt;p&gt;Kiedy wypełnicie formularz, powinniście otrzymać e-mail z wiadomością o rozpoczęciu procesu dołączania do grupy. Ponieważ proces ten jest manualny, czyli muszę Was ręcznie dopisać i  może to trochę zająć, dlatego też proszę o cierpliwość w postaci 24h. Po upływie tego czasu, bombardujcie mnie e-mailami ;)&lt;br /&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Jeśli uda się Wam przejść przez powyższe 2 kroki, stajecie się pełnoprawnymi członkami grupy WSSG. Będziecie mieli dostęp do całej strony, a ja będę mógł Was powiadamiać o nadchodzących spotkaniach.&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ms-groups.pl/wssg/_layouts/people.aspx?MembershipGroupId=5"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 248px; height: 110px;" src="http://4.bp.blogspot.com/_HHm0WsNFjPo/SsaKCOwfluI/AAAAAAAAJek/o1goofOciTE/s400/WSSG_Przypinka_110x248_PL.png" alt="" id="BLOGGER_PHOTO_ID_5388145775121241826" border="0" /&gt;&lt;/a&gt;   &lt;/p&gt;&lt;p&gt;Na pocieszenie powiem, że proces jest jednorazowy i nigdy więcej w życiu nie powinien Wam się przydarzyć ;)&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;Rejestracja na spotkanie&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Jeżeli jesteście zalogowani na swoim koncie, wystarczy wybrać w kalendarzu grupy spotkanie (np. &lt;a href="http://ms-groups.pl/wssg/Lists/Kalendarz/DispForm.aspx?ID=4"&gt;1. spotkania WSSG&lt;/a&gt;) i kliknąć "zarejestruj się". Zapisy polegają na dopisaniu się do listy, a więc dodajemy nowy element z naszymi danymi. Gdy pojawimy się na liście, znaczy że proces zakończył się sukcesem.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;W przypadku gdy nie możemy dodać się do listy, oznacza to że albo nie jesteśmy zalogowani albo nasz użytkownik nie został jeszcze zapisany do grupy WSSG.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Jeszcze raz serdecznie wszystkich zapraszam i do zobaczenie 21 października,&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Jacek Ciereszko&lt;br /&gt;&lt;/p&gt;&lt;p&gt;    &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-5693862327157227922?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/5693862327157227922/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=5693862327157227922' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/5693862327157227922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/5693862327157227922'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2009/10/pierwsze-spotkanie-grupy-warsaw.html' title='Pierwsze spotkanie grupy Warsaw Silverlight Study Group (WSSG)'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_HHm0WsNFjPo/SsaKB132lGI/AAAAAAAAJec/gwykibylE2M/s72-c/WSSG_logo_110x248.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-764833793718230568</id><published>2009-10-02T22:37:00.006+02:00</published><updated>2009-10-02T22:54:17.873+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silverlight 3'/><category scheme='http://www.blogger.com/atom/ns#' term='Controls'/><category scheme='http://www.blogger.com/atom/ns#' term='Behavior'/><title type='text'>[Behaviors] Mouse Over ComboBox Open (Behavior)</title><content type='html'>&lt;p&gt;Po ostatnim małym sukcesie (&lt;a href="http://gallery.expression.microsoft.com/en-us/TextBoxInvokeButton"&gt;7 dni i ponad 700 ściągnięć&lt;/a&gt;) z behaviorsem (&lt;a href="http://jacekciereszko.pl/2009/09/behaviors-textbox-enter-button-invoke.html"&gt;patrz poprzedni  wpis&lt;/a&gt;), postanowiłem że gdy kolejny raz przyjdzie mi do głowy jakiś nowy prosty behavior, również się nim podzielę.&lt;/p&gt;&lt;h3&gt;Prościej się nie da&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Mój najnowszy behavior nie może być prostszy, bo poniżej jednej linii kodu która rzeczywiście coś robi, nie da się zejść ;) Na szczęście jego działanie stawia go w innym świetle. A o co chodzi? Otóż mój nowy behavior, jak nazwa tego wpisu sugeruje, otwiera listę ComboBoxa po najechaniu na nią myszką. Tada!!! :P&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://gallery.expression.microsoft.com/en-us/OpenComboBoxDropDown"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 177px; height: 159px;" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/SsZk_cyMMsI/AAAAAAAAJeU/1LLLibAHTuE/s400/ComboboxBehavior.png" alt="" id="BLOGGER_PHOTO_ID_5388105045416620738" border="0" /&gt;&lt;/a&gt;   &lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;a href="http://gallery.expression.microsoft.com/en-us/OpenComboBoxDropDown"&gt;Live demo&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Niby nic ale rzeczywiście przydaje się w wielu aplikacjach. Po co użytkownik ma klikać na listę żeby się rozwinęła, skoro może najechać na nią myszką, zawsze to o jeden click mniej! :)&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;Dodajemy do kodu&lt;br /&gt;&lt;/h3&gt;&lt;pre class="prettyprint"&gt;&amp;lt;ComboBox Height="29" Width="130" d:LayoutOverrides="Margin"&amp;gt;&lt;br /&gt;  &amp;lt;interaction:Interaction.Behaviors&amp;gt;&lt;br /&gt;     &amp;lt;behavior:OpenComboBoxBehavior /&amp;gt;&lt;br /&gt;  &amp;lt;/interaction:Interaction.Behaviors&amp;gt;&lt;br /&gt;  &amp;lt;ComboBoxItem&amp;gt;&lt;br /&gt;     &amp;lt;TextBlock Text="First element" /&amp;gt;&lt;br /&gt;  &amp;lt;/ComboBoxItem&amp;gt;&lt;br /&gt;  &amp;lt;ComboBoxItem&amp;gt;&lt;br /&gt;     &amp;lt;TextBlock Text="Second element" /&amp;gt;&lt;br /&gt;  &amp;lt;/ComboBoxItem&amp;gt;&lt;br /&gt;  &amp;lt;ComboBoxItem&amp;gt;&lt;br /&gt;     &amp;lt;TextBlock Text="Third element" /&amp;gt;&lt;br /&gt;  &amp;lt;/ComboBoxItem&amp;gt;&lt;br /&gt;  &amp;lt;ComboBoxItem&amp;gt;&lt;br /&gt;     &amp;lt;TextBlock Text="Fourth element" /&amp;gt;&lt;br /&gt;  &amp;lt;/ComboBoxItem&amp;gt;&lt;br /&gt;&amp;lt;/ComboBox&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;, gdzie "i:" jest przestrzenią nazw dla "clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity", a "behavior:" dla projektu w którym umieszczony jest kod bahaviora.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;Wady&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Ten Behavior w ogóle nie nadaje się w interfejsach gdzie mamy wiele elementów i ciągle rozwijająca się lista tylko by zasłaniała pozostałe elementy, natomiast jest świetny w paskach menu, przyciskach z dodatkowymi opcjami itp.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;Inspiracja&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Oczywiście sam na taki pomysł ulepszenie ergonomii interfejsu nie wpadłem, a zwyczajnie podpatrzyłem go na stronie youtube.com. :) Jeżeli przyjrzycie się swojemu użytkownikowi w prawym górnym rogu, to zobaczycie że jak najedziecie na swój profil myszką, to bez klikania rozwija się bardzo wygodna lista dodatkowych opcji.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;Source Code&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Tradycyjnie, ponieważ kod jest krótki, wklejam całość.&lt;br /&gt;&lt;/p&gt;&lt;pre class="prettyprint"&gt;using System;&lt;br /&gt;using System.Net;&lt;br /&gt;using System.Windows;&lt;br /&gt;using System.Windows.Controls;&lt;br /&gt;using System.Windows.Documents;&lt;br /&gt;using System.Windows.Ink;&lt;br /&gt;using System.Windows.Input;&lt;br /&gt;using System.Windows.Media;&lt;br /&gt;using System.Windows.Media.Animation;&lt;br /&gt;using System.Windows.Shapes;&lt;br /&gt;using System.Windows.Interactivity;&lt;br /&gt;&lt;br /&gt;/// Behavior for ComboBox control.&lt;br /&gt;/// It invokes drop down list when mouse is over it.&lt;br /&gt;/// &lt;author&gt;&lt;br /&gt;/// Jacek Ciereszko&lt;br /&gt;/// http://geekswithblogs.net/SilverBlog/&lt;br /&gt;/// &lt;/author&gt;&lt;br /&gt;///&lt;br /&gt;&lt;br /&gt;namespace ComboBoxBehavior&lt;br /&gt;{&lt;br /&gt;   public class OpenComboBoxBehavior : Behavior&lt;combobox&gt;&lt;br /&gt;   {&lt;br /&gt;       /// &lt;summary&gt;&lt;br /&gt;       /// Called after the Behavior is attached to an AssociatedObject.&lt;br /&gt;       /// &lt;/summary&gt;&lt;br /&gt;       /// &lt;remarks&gt;Override this to hook up functionality to the AssociatedObject.&lt;/remarks&gt;&lt;br /&gt;       protected override void OnAttached()&lt;br /&gt;       {&lt;br /&gt;           base.OnAttached();&lt;br /&gt;           this.AssociatedObject.MouseEnter += new MouseEventHandler(AssociatedObject_MouseEnter);&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       /// &lt;summary&gt;&lt;br /&gt;       /// Called after the Behavior is detached from an AssociatedObject.&lt;br /&gt;       /// &lt;/summary&gt;&lt;br /&gt;       /// &lt;remarks&gt;Override this to hook up functionality to the AssociatedObject.&lt;/remarks&gt;&lt;br /&gt;       protected override void OnDetaching()&lt;br /&gt;       {&lt;br /&gt;           this.AssociatedObject.MouseEnter -= new MouseEventHandler(AssociatedObject_MouseEnter);&lt;br /&gt;           base.OnDetaching();&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       /// &lt;summary&gt;&lt;br /&gt;       /// When mouse is over ComboBox, control drop down will open&lt;br /&gt;       /// &lt;/summary&gt;&lt;br /&gt;       /// &lt;param name="sender"&gt;&lt;br /&gt;       /// &lt;param name="e"&gt;&lt;br /&gt;       void AssociatedObject_MouseEnter(object sender, MouseEventArgs e)&lt;br /&gt;       {&lt;br /&gt;           this.AssociatedObject.IsDropDownOpen = true;&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;/combobox&gt;&lt;/pre&gt;&lt;h3&gt;Do pobrania&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Kod jest także dostępny do pobrania na stronie &lt;a href="http://gallery.expression.microsoft.com/en-us/OpenComboBoxDropDown"&gt;http://gallery.expression.microsoft.com/en-us/OpenComboBoxDropDown&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Pozdrawiam,&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Jacek Ciereszko&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-764833793718230568?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/764833793718230568/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=764833793718230568' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/764833793718230568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/764833793718230568'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2009/10/behaviors-mouse-over-combobox-open.html' title='[Behaviors] Mouse Over ComboBox Open (Behavior)'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_HHm0WsNFjPo/SsZk_cyMMsI/AAAAAAAAJeU/1LLLibAHTuE/s72-c/ComboboxBehavior.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-1480542848935593670</id><published>2009-09-28T02:24:00.005+02:00</published><updated>2009-09-28T02:31:20.652+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='Surface'/><title type='text'>Pierwsze wrażenia z Microsoft Surface SDK 1.0 SP1</title><content type='html'>Kiedy w końcu udało mi się zdobyć dostęp do SDK Microsoft Surface, natchniony rozkminianiem o co w tym wszystkim chodzi, postanowiłem króciutko się podzielić pierwszymi doświadczeniami.&lt;br /&gt;&lt;span xmlns=""&gt;&lt;h3&gt;Instalacja&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Instalacja oprócz tego że musiałem doinstalować coś do XNA przebiegła niezwykle sprawnie. Całość razem z SDK, przykładami, super emulatorem i resztą rzeczy o których jeszcze nie mam pojęcia, znalazły się bezboleśnie na moim dysku, a w Visual Studio doszły nowe typy projektów.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;Development&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Ci którzy może jeszcze nie słyszeli, na Surface-a robi się przede wszystkim w WPF i ponoć w XNA (nie sprawdziłem jeszcze). Różnica pomiędzy zwykłym WPFem, a WPFem na Surface polega na tym że mamy zestaw dodatkowych kontrolek&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HHm0WsNFjPo/SsACrPivPbI/AAAAAAAAJeM/Uyx4Py8Kiis/s1600-h/Kontrolki.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 204px; height: 400px;" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/SsACrPivPbI/AAAAAAAAJeM/Uyx4Py8Kiis/s400/Kontrolki.png" alt="" id="BLOGGER_PHOTO_ID_5386308096264977842" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p style="text-align: center;"&gt;   &lt;/p&gt;&lt;p&gt;oraz tym że aplikację uruchamiamy w specjalnym emulatorze, zwanym "&lt;strong&gt;Surface Simulator&lt;/strong&gt;".&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Polecam zacząć swoją przygodę od przykładów zawartych w SDK, skąd nauczymy się najwięcej :)&lt;br /&gt;   &lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HHm0WsNFjPo/SsACpsZqqyI/AAAAAAAAJd8/V_sOap4RxuA/s1600-h/Surface1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_HHm0WsNFjPo/SsACpsZqqyI/AAAAAAAAJd8/V_sOap4RxuA/s400/Surface1.png" alt="" id="BLOGGER_PHOTO_ID_5386308069651819298" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;p style="text-align: center;"&gt;Kursor myszki i touchpad z laptopa&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;Przykłady&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Aby zwizualizować jak to wygląd w praktyce, nagrałem krótki filmik który niestety z powodu oporu przed nagrywaniem (winę ponosi "&lt;strong&gt;Surface Simulator")&lt;/strong&gt;, nie oddaje pełnej frajdy z korzystania z tego dobrodziejstwa! Przez pełną frajdę rozumiem tu korzystanie z np. kilku myszek jednoczenie co symuluje palce użytkownika (patrz obrazki), czy też super dźwięk.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Na obrazku widać jak to jest zrobione w praktyce (mam dostępne 2 "palce" którymi obracam elementy, zmieniam ich wielkość itp.)&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HHm0WsNFjPo/SsACqgnVH9I/AAAAAAAAJeE/8Ub0jZ8lekg/s1600-h/Surface2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/SsACqgnVH9I/AAAAAAAAJeE/8Ub0jZ8lekg/s400/Surface2.png" alt="" id="BLOGGER_PHOTO_ID_5386308083667771346" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;, a na filmie (jak wspomniałem trochę ograniczonym) widać jak to się wszystko uruchamia.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;object height="505" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/iAHJxNLXQvg&amp;amp;hl=pl&amp;amp;fs=1&amp;amp;rel=0"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/iAHJxNLXQvg&amp;amp;hl=pl&amp;amp;fs=1&amp;amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="505" width="640"&gt;&lt;/embed&gt;&lt;a class="eyliheswvcsxqfehknxx" href="http://www.youtube.com/v/iAHJxNLXQvg&amp;amp;hl=pl&amp;amp;fs=1&amp;amp;rel=0"&gt;&lt;/a&gt;&lt;/object&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Jak tylko oderwę się na chwilę od tego cuda, postaram się wrzucić więcej info.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Pozdrawiam,&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Jacek Ciereszko&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-1480542848935593670?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/1480542848935593670/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=1480542848935593670' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/1480542848935593670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/1480542848935593670'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2009/09/pierwsze-wrazenia-z-microsoft-surface.html' title='Pierwsze wrażenia z Microsoft Surface SDK 1.0 SP1'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_HHm0WsNFjPo/SsACrPivPbI/AAAAAAAAJeM/Uyx4Py8Kiis/s72-c/Kontrolki.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-8235287821635940461</id><published>2009-09-21T01:33:00.003+02:00</published><updated>2009-09-21T01:50:37.359+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silverlight 3'/><category scheme='http://www.blogger.com/atom/ns#' term='Controls'/><category scheme='http://www.blogger.com/atom/ns#' term='Behavior'/><title type='text'>[Behaviors] TextBox Enter Button Invoke (TargetedTriggerAction)</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;Jakiś czas temu zdarzyło mi się napisać własny behavior, który w odróżnieniu od tych które dłubie na co dzień, może mieć zastosowanie w wielu aplikacjach, stąd też pomysł aby się nim podzielić :)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Co to są behaviorsy nie będę się rozpisywał w tym temacie. Zagadnienie jest większe, a do poczytania o nim polecam świetny artykuł:  &lt;a href="http://www.silverlightshow.net/items/Behaviors-and-Triggers-in-Silverlight-3.aspx"&gt;http://www.silverlightshow.net/items/Behaviors-and-Triggers-in-Silverlight-3.aspx&lt;/a&gt;&lt;br /&gt;   &lt;/p&gt;&lt;h2&gt;O co chodzi?&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Skoro już wszyscy wiedzą co to są behaviorsy w Silverlight 3.0, to wypadało by powiedzieć że mój jest typu "TargetedTriggerAction", czyli wykonuje akcję na innym obiekcie gdy ten do którego jest przypisany, wywoła wybrany event.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Mój behavior po wciśnięciu przycisku "Enter" we wskazanym textboxsie zasymuluje wciśnięcie wskazanego przycisku (wszystko co dziedziczy z ButtonBase).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Pewnie pomyśleliście sobie od razu, co za bzdura, przecież można podpiąć event i wywołać tą samą metodę w kodzie. Tylko co w przypadku gdy namiętnie stosujemy MVVM, gdzie nasz "code behind" jest czyściutki i zawiera tylko konstruktor? W takim wypadku behavior jest tym czego poszukujemy. Co ważniejsze, "code behind" pozostaje nienaruszony, nie śmiecimy również w ViewModelu, a operacje "interfejsowe" pozostają ładnie oddzielone i nadają się do ponownego użycia.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Standardowe zastosowanie&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Jak wspomniałem, behavior ma zastosowanie przede wszystkim w aplikacjach z wzorcem MVVM, a jego miejsce to np. pole wyszukiwania.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://wpierdalaj.pl/blog_resources/Behavior/index.html"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 330px; height: 218px;" src="http://1.bp.blogspot.com/_HHm0WsNFjPo/Sra992Tx02I/AAAAAAAAJdc/l4Rro5T17YM/s400/Behavior.png" alt="" id="BLOGGER_PHOTO_ID_5383699274816148322" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span xmlns=""&gt;&lt;p&gt;&lt;a href="http://wpierdalaj.pl/blog_resources/Behavior/index.html"&gt;Live demo&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;Wciskając "Enter" w polu tekstowym otrzymujemy ten sam efekt co wciskając przycisk.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;h2&gt;Dodajemy do aplikacji&lt;br /&gt;&lt;/h2&gt;&lt;pre class="prettyprint"&gt;    &amp;lt;Button x:Name="TargetedButton" Content="Targeted Button"  /&amp;gt;&lt;br /&gt; &amp;lt;TextBox Text="TextBox" &amp;gt;&lt;br /&gt;     &amp;lt;i:Interaction.Triggers&amp;gt;&lt;br /&gt;         &amp;lt;i:EventTrigger EventName="KeyDown" &amp;gt;&lt;br /&gt;             &amp;lt;behavior:TextBoxEnterButtonInvoke TargetName="TargetedButton" /&amp;gt;&lt;br /&gt;         &amp;lt;/i:EventTrigger&amp;gt;&lt;br /&gt;     &amp;lt;/i:Interaction.Triggers&amp;gt;&lt;br /&gt; &amp;lt;/TextBox&amp;gt;&lt;/pre&gt;&lt;p&gt;, gdzie "i:" jest przestrzenią nazw dla "clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity",  a "behavior:" dla projektu w którym umieszony jest kod bahaviora.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Kod źródłowy&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Kodu jest niewiele, więc postanowiłem wkleić go cały.&lt;br /&gt;&lt;/p&gt;&lt;pre class="prettyprint"&gt;using System;&lt;br /&gt;using System.Net;&lt;br /&gt;using System.Windows;&lt;br /&gt;using System.Windows.Controls;&lt;br /&gt;using System.Windows.Documents;&lt;br /&gt;using System.Windows.Ink;&lt;br /&gt;using System.Windows.Input;&lt;br /&gt;using System.Windows.Media;&lt;br /&gt;using System.Windows.Media.Animation;&lt;br /&gt;using System.Windows.Shapes;&lt;br /&gt;using System.Windows.Interactivity;&lt;br /&gt;using System.Windows.Automation.Peers;&lt;br /&gt;using System.Windows.Automation.Provider;&lt;br /&gt;using System.Windows.Controls.Primitives;&lt;br /&gt;&lt;br /&gt;/// TargetedTriggerAction for TextBox control.&lt;br /&gt;/// Invokes targeted button when Enter is pressed inside TextBox.&lt;br /&gt;/// &lt;author&gt;&lt;br /&gt;/// Jacek Ciereszko&lt;br /&gt;/// http://jacekciereszko.pl&lt;br /&gt;/// &lt;/author&gt;&lt;br /&gt;///&lt;br /&gt;&lt;br /&gt;namespace TextBoxEnterBehavior&lt;br /&gt;{&lt;br /&gt;public class TextBoxEnterButtonInvoke : TargetedTriggerAction&lt;buttonbase&gt;&lt;br /&gt;{&lt;br /&gt;   /// &lt;summary&gt;&lt;br /&gt;   /// Gets or sets the peer.&lt;br /&gt;   /// &lt;/summary&gt;&lt;br /&gt;   /// &lt;value&gt;The peer.&lt;/value&gt;&lt;br /&gt;   private AutomationPeer _peer { get; set; }&lt;br /&gt;&lt;br /&gt;   /// &lt;summary&gt;&lt;br /&gt;   /// Gets or sets the target button&lt;br /&gt;   /// &lt;/summary&gt;&lt;br /&gt;   private ButtonBase _targetedButton { get; set; }&lt;br /&gt;&lt;br /&gt;   /// &lt;summary&gt;&lt;br /&gt;   /// Called after the TargetedTriggerAction is attached to an AssociatedObject.&lt;br /&gt;   /// &lt;/summary&gt;&lt;br /&gt;   /// &lt;remarks&gt;Override this to hook up functionality to the AssociatedObject.&lt;/remarks&gt;&lt;br /&gt;   protected override void OnAttached()&lt;br /&gt;   {&lt;br /&gt;       base.OnAttached();&lt;br /&gt;       _targetedButton = this.Target;&lt;br /&gt;       if (null == _targetedButton)&lt;br /&gt;       {&lt;br /&gt;           return;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       // set peer&lt;br /&gt;       this._peer = FrameworkElementAutomationPeer.FromElement(_targetedButton);&lt;br /&gt;       if (this._peer == null)&lt;br /&gt;       {&lt;br /&gt;           this._peer = FrameworkElementAutomationPeer.CreatePeerForElement(_targetedButton);&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   /// &lt;summary&gt;&lt;br /&gt;   /// Called after targeted Button change.&lt;br /&gt;   /// &lt;/summary&gt;&lt;br /&gt;   /// &lt;remarks&gt;Override this to hook up functionality to the new targeted Button.&lt;/remarks&gt;&lt;br /&gt;   protected override void OnTargetChanged(ButtonBase oldTarget, ButtonBase newTarget)&lt;br /&gt;   {&lt;br /&gt;       base.OnTargetChanged(oldTarget, newTarget);&lt;br /&gt;       _targetedButton = newTarget;&lt;br /&gt;       if (null == _targetedButton)&lt;br /&gt;       {&lt;br /&gt;           return;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       // set peer&lt;br /&gt;       this._peer = FrameworkElementAutomationPeer.FromElement(_targetedButton);&lt;br /&gt;       if (this._peer == null)&lt;br /&gt;       {&lt;br /&gt;           this._peer = FrameworkElementAutomationPeer.CreatePeerForElement(_targetedButton);&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   /// &lt;summary&gt;&lt;br /&gt;   /// Invokes the targeted Button when Enter key is pressed inside TextBox.&lt;br /&gt;   /// &lt;/summary&gt;&lt;br /&gt;   /// &lt;param name="parameter"&gt;KeyEventArgs with Enter key&lt;br /&gt;   protected override void Invoke(object parameter)&lt;br /&gt;   {&lt;br /&gt;       KeyEventArgs keyEventArgs = parameter as KeyEventArgs;&lt;br /&gt;       if (null != keyEventArgs &amp;amp;&amp;amp; keyEventArgs.Key == Key.Enter)&lt;br /&gt;       {&lt;br /&gt;           if (null != _peer)&lt;br /&gt;           {&lt;br /&gt;               IInvokeProvider invokeProvider = _peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;&lt;br /&gt;               invokeProvider.Invoke();&lt;br /&gt;           }&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/buttonbase&gt;&lt;/pre&gt;&lt;h2&gt;Do pobrania&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Kod jest także dostępny do pobrania na stronie &lt;a href="http://gallery.expression.microsoft.com/en-us/TextBoxInvokeButton"&gt;http://gallery.expression.microsoft.com/en-us/TextBoxInvokeButton&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Pozdrawiam,&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Jacek Ciereszko&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-8235287821635940461?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/8235287821635940461/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=8235287821635940461' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/8235287821635940461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/8235287821635940461'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2009/09/behaviors-textbox-enter-button-invoke.html' title='[Behaviors] TextBox Enter Button Invoke (TargetedTriggerAction)'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_HHm0WsNFjPo/Sra992Tx02I/AAAAAAAAJdc/l4Rro5T17YM/s72-c/Behavior.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-3987931532761341294</id><published>2009-08-21T01:10:00.007+02:00</published><updated>2009-08-23T21:46:36.359+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Expression Blend'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight 3'/><category scheme='http://www.blogger.com/atom/ns#' term='Controls'/><category scheme='http://www.blogger.com/atom/ns#' term='Expression Studio'/><title type='text'>Youtube w Silverlight 3.0?</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;Wraz z nowym Expression Blendem 3, a właściwie to z Expression Encoderem 3 otrzymaliśmy nową kontrolkę do wyświetlania mediów, czyli MediaPlayer!&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Czym jest MediaPlayer?&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;MediaPlayer to zaawansowana kontrolka do odtwarzania plików video, która opakowuje wszystkie funkcjonalności jakie możemy sobie wymarzyć. Oprócz podstawowego odtwarzania pozwala na tworzenie Playlist, Chapters, AutoLoad, AutoPlay, działa  w trybie Offline (po zaakceptowaniu zwiększenia przestrzeni IsolatedStorage), Popout, Transport Controls, Progress Bar, Volume Bar, Full Screen i  Closed Caption buttons.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Uruchomienie&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Jeśli mamy zainstalowanego Expression Blenda 3 oraz Expression Encoder 3 to kontrolka powinna pojawić się w zakładce Assets-&gt; Media. Jednak jeśli tak się nie stanie, można zrobić to ręcznie, przechodząc do katalogu instalacyjnego Expression Encodera (zwykle jest to "&lt;em&gt;C:\Program Files\Microsoft Expression\Encoder 3&lt;/em&gt;") i wybierając katalog "BlendMediaPlayer". W nim znajduje się biblioteka "&lt;span style="font-style: italic;"&gt;MediaPlayer.dll&lt;/span&gt;" którą wystarczy dołączyć do projekt Silverlight np. w  Visual Studio.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;W aplikacji Silverlight (dowolnej) w kodzie xaml dodajemy odniesienie do namespace-a, np. "xmlns:media="clr-namespace:ExpressionMediaPlayer;assembly=MediaPlayer" oraz kod odtwarzacza&lt;br /&gt;&lt;/p&gt;&lt;p&gt;"&amp;lt;media:MediaPlayer /&amp;gt;".&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HHm0WsNFjPo/So3aFTc-mjI/AAAAAAAAJcE/K73lzH5je40/s1600-h/MediaPlayer.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 301px;" src="http://3.bp.blogspot.com/_HHm0WsNFjPo/So3aFTc-mjI/AAAAAAAAJcE/K73lzH5je40/s400/MediaPlayer.jpg" alt="" id="BLOGGER_PHOTO_ID_5372189715178887730" border="0" /&gt;&lt;/a&gt;   &lt;/p&gt;&lt;p&gt;Filmy które chcemy odtwarzać ustawiamy w playlist. To w jaki sposób przekażemy je do kontrolki zależy już tylko od nas. W moim przykładzie ustawiam akurat adresy na sztywno w kodzie.&lt;br /&gt;&lt;/p&gt;&lt;pre class="prettyprint"&gt;&amp;lt;media:MediaPlayer x:Name="mediaPlayer" &amp;gt;&lt;br /&gt;&amp;lt;media:MediaPlayer.Playlist&amp;gt;&lt;br /&gt;    &amp;lt;media:Playlist&amp;gt;&lt;br /&gt;        &amp;lt;media:Playlist.Items&amp;gt;                        &lt;br /&gt;            &amp;lt;media:PlaylistItem MediaSource="adresDoFilmu" Title="Star Trek Trailer" VideoHeight="1024" VideoWidth="864" /&amp;gt;&lt;br /&gt;        &amp;lt;/media:Playlist.Items&amp;gt;&lt;br /&gt;    &amp;lt;/media:Playlist&amp;gt;&lt;br /&gt;&amp;lt;/media:MediaPlayer.Playlist&amp;gt;&lt;br /&gt;&amp;lt;/media:MediaPlayer&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Oczywiście cały powyższy proces można zrealizować w Expression Blend 3 przy pomocy kilku kliknięć. :)&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Wygląd&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Jeśli podstawowy wygląd kontrolki nie przypadł nam do gustu, możemy zmodyfikować jej template i dostosować wygląd do naszych wymagań.  Najłatwiej można to zrobić używając Expression Blenda 3, poprzez wybór prawym myszki na kontrolce, "Edit Template" -&amp;gt; "Edit a copy..".&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HHm0WsNFjPo/So3aF_joTxI/AAAAAAAAJcM/UeJQTHi_K9A/s1600-h/MediaPlayerJackowy.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 302px;" src="http://3.bp.blogspot.com/_HHm0WsNFjPo/So3aF_joTxI/AAAAAAAAJcM/UeJQTHi_K9A/s400/MediaPlayerJackowy.jpg" alt="" id="BLOGGER_PHOTO_ID_5372189727017946898" border="0" /&gt;&lt;/a&gt;   &lt;/p&gt;&lt;h2&gt;Live demo&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Demo odtwarza HD film "Car accident" w formacie wmv (thx to &lt;a href="http://stormscenes.com"&gt;http://stormscenes.com&lt;/a&gt;). &lt;a href="http://wpierdalaj.pl/blog_resources/MediaPlayer/SilverlightMediaPlayerTestPage.html"&gt;Link&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Source Code&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="http://wpierdalaj.pl/blog_resources/MediaPlayer/SilverlightMediaPlayer.zip"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;References&lt;br /&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.adamkinney.com/Blog/MediaPlayer-control-included-in-Silverlight-3"&gt;MediaPlayer control included in Silverlight 3&lt;/a&gt;&lt;br /&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.uxpassion.com/2009/08/silverlight-tutorial-play-hd-youtube-videos-silverlight/"&gt;Silverlight tutorial: Play HD YouTube videos with Silverlight&lt;/a&gt;&lt;br /&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Pozdrawiam,&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Jacek Ciereszko&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-3987931532761341294?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/3987931532761341294/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=3987931532761341294' title='Komentarze (3)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/3987931532761341294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/3987931532761341294'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2009/08/youtube-w-silverlight-30.html' title='Youtube w Silverlight 3.0?'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_HHm0WsNFjPo/So3aFTc-mjI/AAAAAAAAJcE/K73lzH5je40/s72-c/MediaPlayer.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-5849399868358827580</id><published>2009-08-16T13:08:00.005+02:00</published><updated>2009-08-16T13:34:11.714+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bloggers Underground'/><category scheme='http://www.blogger.com/atom/ns#' term='konferencja'/><title type='text'>Bloggers Underground #2.5</title><content type='html'>W imieniu organizatorów chciałem zaprosić wszystkich blogerów na kolejną imprezę z cyklu Bloggers Underground. Spotkanie odbędzie się 29 września o godzinie 19:00 w jednym z lokali w centrum Warszawy.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HHm0WsNFjPo/SofsFHicWhI/AAAAAAAAJbk/jlggUuW_H_Q/s1600-h/underground.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 354px; height: 288px;" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/SofsFHicWhI/AAAAAAAAJbk/jlggUuW_H_Q/s400/underground.jpg" alt="" id="BLOGGER_PHOTO_ID_5370520653329619474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Co daje spotkanie? Na pewno możliwość poznanie ludzi których blogi czytamy na codzień. Możemy także opowiedzieć ciekawą historię na temat związany z blogami i posłuchać opowieści innych osób.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://itblogs.pl/blogs/bloggersunderground/archive/2009/08/04/bloggers-underground-2-5.aspx"&gt;Rejestracja na spotkanie Bloggers Underground&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Jak było rok temu?&lt;br /&gt;&lt;a href="http://itblogs.pl/blogs/bloggersunderground/archive/2008/10/11/po-pierwszym-spotkaniu-quot-bloggers-underground-quot.aspx"&gt;Po pierwszym spotkaniu "Bloggers Underground"!&lt;/a&gt;&lt;br /&gt;&lt;a href="http://jacekciereszko.pl/2008/10/podsumowanie-bloggers-underground-i.html"&gt;Podsumowanie Bloggers Underground i zdjęcia&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pozdrawiam,&lt;br /&gt;Jacek Ciereszko&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-5849399868358827580?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/5849399868358827580/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=5849399868358827580' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/5849399868358827580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/5849399868358827580'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2009/08/bloggers-underground-25.html' title='Bloggers Underground #2.5'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_HHm0WsNFjPo/SofsFHicWhI/AAAAAAAAJbk/jlggUuW_H_Q/s72-c/underground.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-3405225439341639089</id><published>2009-07-11T15:48:00.006+02:00</published><updated>2009-07-11T16:12:26.784+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Expression Blend'/><category scheme='http://www.blogger.com/atom/ns#' term='Isolated Storage'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight 3'/><category scheme='http://www.blogger.com/atom/ns#' term='Expression Studio'/><title type='text'>Prototyp aplikacji w Silverlight 3.0 w kilka minut?</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;Jedną z nowości która ukazała się przy okazji wydania najnowszej wersji &lt;a href="http://go.microsoft.com/fwlink/?LinkID=143571"&gt;Silverlight 3.0&lt;/a&gt; jest budowa prototypu aplikacji przy pomocy tzw. SketchFlow (w wolnym tłumaczeniu "szkic przepływu"). Taka możliwość pojawiła w dzięki wydaniu nowej wersji programu &lt;a href="http://go.microsoft.com/fwlink/?LinkID=157184"&gt;Expression Blend 3&lt;/a&gt;, która to wspiera tworzenie tego typu aplikacji.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;W niniejszym artykule spróbuje opisać podstawowe funkcje jakie daj nam to rozwiązanie, zbudujemy prosty prototyp aplikacji oraz wygenerujemy dla niego dokumentację.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;Ale o co tu chodzi?&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Otóż mamy do dyspozycji narzędzie dzięki któremu jesteśmy w stanie stworzyć prototyp interfejsu aplikacji oraz zobrazować nawigację pomiędzy oknami na czytelnym diagramie.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;Potrzebne instalacje&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Aby rozpocząć pracę musimy zainstalować pakiet SDK do pracy z Silverlight 3.0, a więc &lt;a href="http://go.microsoft.com/fwlink/?LinkID=143571"&gt;Microsoft® Silverlight™ 3 Tools for Visual Studio 2008 SP1&lt;/a&gt; oraz &lt;a href="http://go.microsoft.com/fwlink/?LinkID=157184"&gt;Expression Blend 3 + SketchFlow RC&lt;/a&gt; do tworzenia naszego prototypu.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;Budujemy własny prototyp&lt;br /&gt;&lt;/h3&gt;&lt;h4&gt;1. Tworzenie nowego projektu&lt;br /&gt;&lt;/h4&gt;&lt;p&gt;Uruchamiamy Blenda, wybieramy "&lt;em&gt;New Project&lt;/em&gt;" i następnie "&lt;em&gt;Silverlight 3.0 SketchFlow Application&lt;/em&gt;".&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HHm0WsNFjPo/SliZMNxlaZI/AAAAAAAAJZE/XEFyfeN5EU8/s1600-h/NewProject.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 356px; height: 400px;" src="http://4.bp.blogspot.com/_HHm0WsNFjPo/SliZMNxlaZI/AAAAAAAAJZE/XEFyfeN5EU8/s400/NewProject.jpg" alt="" id="BLOGGER_PHOTO_ID_5357200191892318610" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p style="text-align: center;"&gt;   &lt;/p&gt;&lt;p&gt;Powinniśmy zobaczyć typowy dla Blenda widok nowego projektu oraz dodatkowy dolny panel z niebieskim kwadracikiem "&lt;em&gt;Screen 1&lt;/em&gt;". Ten niebieski kwadracik reprezentuje widoczne powyżej okno aplikacji, a cały panel nazywa się "&lt;em&gt;SketchFlow Map&lt;/em&gt;" i służy właśnie do modelowania nawigacji pomiędzy kwadracikami (czyt. Oknami aplikacji).&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HHm0WsNFjPo/SliZMQFH6II/AAAAAAAAJZM/f_1VaC4BteM/s1600-h/Sketch1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 329px;" src="http://3.bp.blogspot.com/_HHm0WsNFjPo/SliZMQFH6II/AAAAAAAAJZM/f_1VaC4BteM/s400/Sketch1.jpg" alt="" id="BLOGGER_PHOTO_ID_5357200192511142018" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h4&gt;2. Dodajemy nowe okno&lt;br /&gt;&lt;/h4&gt;&lt;p&gt;Zanim dodamy nowe okno i zdefiniujemy połączenie pomiędzy nimi, dodajmy jakiś opis do okna "&lt;em&gt;Screen 1&lt;/em&gt;" aby móc je później rozróżnić. W tym celu otwórzmy boczne menu i wybierzmy zakładkę "&lt;em&gt;&gt;&gt;&lt;/em&gt;" -&gt; " &lt;em&gt;SketchFlow&lt;/em&gt;" -&gt; "&lt;em&gt;Styles&lt;/em&gt;". W zakładce znajdziemy dużo zdefiniowanych kontrolek z przypisanymi stylami, dzięki czemu będzie nam łatwiej opisywać tworzony interfejs. Wybierzmy i przeciągnijmy na aplikację np. "&lt;em&gt;TextBox&lt;/em&gt;" który nazywa się w tym wypadku "&lt;em&gt;Note-Sketch&lt;/em&gt;". Możemy także nadać mu jakiś domyślny tekst.&lt;br /&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HHm0WsNFjPo/SliZMfh5SlI/AAAAAAAAJZU/Yd1WSuTvVB0/s1600-h/Sketch2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 359px;" src="http://1.bp.blogspot.com/_HHm0WsNFjPo/SliZMfh5SlI/AAAAAAAAJZU/Yd1WSuTvVB0/s400/Sketch2.jpg" alt="" id="BLOGGER_PHOTO_ID_5357200196658350674" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HHm0WsNFjPo/SliZMjsaXEI/AAAAAAAAJZc/5Nb89VwAnOk/s1600-h/Sketch3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 295px;" src="http://3.bp.blogspot.com/_HHm0WsNFjPo/SliZMjsaXEI/AAAAAAAAJZc/5Nb89VwAnOk/s400/Sketch3.jpg" alt="" id="BLOGGER_PHOTO_ID_5357200197776202818" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;p&gt;Teraz kiedy nasze pierwsze okno jest już podpisane, dodajmy nowe. Przechodzimy do zakładki "&lt;em&gt;SketchFlow Map&lt;/em&gt;" i najeżdżamy kursorem na niebieski kwadracik "&lt;em&gt;Screen 1&lt;/em&gt;". W tym momencie powinno rozwinąć się menu w którym mamy do wyboru cztery opcję.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HHm0WsNFjPo/SliZNJd4CaI/AAAAAAAAJZk/PyriXwWlgdc/s1600-h/Sketch4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 272px; height: 184px;" src="http://3.bp.blogspot.com/_HHm0WsNFjPo/SliZNJd4CaI/AAAAAAAAJZk/PyriXwWlgdc/s400/Sketch4.jpg" alt="" id="BLOGGER_PHOTO_ID_5357200207915780514" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;p&gt;Idąc &lt;strong&gt;od prawej&lt;/strong&gt;, pierwsza opcja z rozwiniętego menu to zmiana koloru kwadracika. W ten sposób możemy grupować je, zwiększając czytelność całego diagramu.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HHm0WsNFjPo/SliZumZ_kfI/AAAAAAAAJZs/3oXTLyw4_AA/s1600-h/Sketch4a.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 153px; height: 116px;" src="http://4.bp.blogspot.com/_HHm0WsNFjPo/SliZumZ_kfI/AAAAAAAAJZs/3oXTLyw4_AA/s400/Sketch4a.jpg" alt="" id="BLOGGER_PHOTO_ID_5357200782619808242" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;p&gt;Drugą opcją od prawej jest dodanie komponentu do okna, a więc zagnieżdżenie innego okna wewnątrz tego. Sprowadza się to do stworzenia elementów w aplikacji które w prosty sposób możemy ponownie używać na wielu ekranach (np. menu, stopka).&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HHm0WsNFjPo/SliZu6gU-OI/AAAAAAAAJZ0/c85Q8c0ndlE/s1600-h/Sketch4b.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 146px; height: 117px;" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/SliZu6gU-OI/AAAAAAAAJZ0/c85Q8c0ndlE/s400/Sketch4b.jpg" alt="" id="BLOGGER_PHOTO_ID_5357200788015085794" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;p&gt;Trzecią opcją od prawej, jest połączenie z istniejącym oknem. Kiedy nasz prototyp będzie miał wiele okien, będzie to idealny wybór aby stworzyć dodatkowe połączenia pomiędzy nimi.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HHm0WsNFjPo/SliZvLn89wI/AAAAAAAAJZ8/vP6QMAbRSc8/s1600-h/Sketch4c.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 142px; height: 115px;" src="http://3.bp.blogspot.com/_HHm0WsNFjPo/SliZvLn89wI/AAAAAAAAJZ8/vP6QMAbRSc8/s400/Sketch4c.jpg" alt="" id="BLOGGER_PHOTO_ID_5357200792610469634" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;p&gt;Ostatnim przyciskiem od prawej, a pierwszym od lewej jest przycisk dodania nowego okno aplikacji który będzie połączony z obecnym. Właśnie tej opcji musimy użyć.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HHm0WsNFjPo/SliZvVQmhAI/AAAAAAAAJaE/Jq7V0Zv5rgs/s1600-h/Sketch4d.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 144px; height: 116px;" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/SliZvVQmhAI/AAAAAAAAJaE/Jq7V0Zv5rgs/s400/Sketch4d.jpg" alt="" id="BLOGGER_PHOTO_ID_5357200795196883970" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;p&gt;Najlepiej kliknąć prawym myszki i przeciągnąć nowo utworzony kwadracik obok. Po tej operacji utworzy się nowe puste okno "&lt;em&gt;Screen 2&lt;/em&gt;" oraz połączenie pomiędzy nim i poprzednim oknem "&lt;em&gt;Screen 1&lt;/em&gt;".&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HHm0WsNFjPo/SliZvVQHMaI/AAAAAAAAJaM/e_C7lCB_EC0/s1600-h/Sketch5.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 327px; height: 400px;" src="http://3.bp.blogspot.com/_HHm0WsNFjPo/SliZvVQHMaI/AAAAAAAAJaM/e_C7lCB_EC0/s400/Sketch5.jpg" alt="" id="BLOGGER_PHOTO_ID_5357200795194831266" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;h4&gt;3. Komunikacja pomiędzy oknami&lt;br /&gt;&lt;/h4&gt;&lt;p&gt;Zanim stworzymy komunikację pomiędzy oknami, dodajmy tak jak poprzednio, jakiś opis do okna "&lt;em&gt;Screen 2&lt;/em&gt;" w celu odróżnienia go (wystarczy textbox) i wróćmy do okna "&lt;em&gt;Screen 1&lt;/em&gt;" (np. klikając w kwadracik "&lt;em&gt;Screen 1&lt;/em&gt;"). Na tym ekranie dodajmy przycisk który przeniesie nas do okna "&lt;em&gt;Screen 2&lt;/em&gt;".&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Aby zrealizować komunikację pomiędzy oknami, najłatwiej kliknąć prawym klawiszem myszki na przycisku, wybrać opcję "&lt;em&gt;Navigate to&lt;/em&gt;" oraz okno do którego chcemy stworzyć połączenie.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HHm0WsNFjPo/Slialty336I/AAAAAAAAJaU/KiE0lZaxsSA/s1600-h/Sketch6.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 375px;" src="http://4.bp.blogspot.com/_HHm0WsNFjPo/Slialty336I/AAAAAAAAJaU/KiE0lZaxsSA/s400/Sketch6.jpg" alt="" id="BLOGGER_PHOTO_ID_5357201729496014754" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;p&gt;W tym momencie uruchommy nasz prototyp i zobaczmy co otrzymaliśmy (klawisz F5).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Powinniśmy zobaczyć pierwsze okno powitalne.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HHm0WsNFjPo/SliYnKF0WEI/AAAAAAAAJYc/pb348WXcXCs/s1600-h/Demo1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 259px;" src="http://3.bp.blogspot.com/_HHm0WsNFjPo/SliYnKF0WEI/AAAAAAAAJYc/pb348WXcXCs/s400/Demo1.jpg" alt="" id="BLOGGER_PHOTO_ID_5357199555248281666" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;p&gt;Oraz drugiego okno do którego zostaliśmy przekierowani po wciśnięciu przycisku "&lt;em&gt;Take me to Screen 2&lt;/em&gt;".&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HHm0WsNFjPo/SliYnDrTsSI/AAAAAAAAJYk/PCIoLOp3MC4/s1600-h/Demo2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 278px;" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/SliYnDrTsSI/AAAAAAAAJYk/PCIoLOp3MC4/s400/Demo2.jpg" alt="" id="BLOGGER_PHOTO_ID_5357199553526477090" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;h4&gt;4. Modyfikacja prototypu&lt;br /&gt;&lt;/h4&gt;&lt;p&gt;Na pewno wszyscy z Was zdążyli zauważyć że oprócz stworzonej aplikacji mamy także dodatkowe menu "SKETCHFLOW PLAYER". Służy ono do zaznaczania uwag do aplikacji. Do dyspozycji mamy pole tekstowe do wpisywania komentarzy do okien jak i zestaw "mazaków" do malowania bezpośrednio po interfejsie.  Jeśli poruszanie się po interfejsie nie będzie dość wygodne, zawsze można użyć mapy ekranów "Map" i bezpośrednio przejść do wybranego widoku.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HHm0WsNFjPo/SliYnS06GeI/AAAAAAAAJYs/nJGu23vpDPw/s1600-h/Demo3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 281px;" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/SliYnS06GeI/AAAAAAAAJYs/nJGu23vpDPw/s400/Demo3.jpg" alt="" id="BLOGGER_PHOTO_ID_5357199557593274850" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;p&gt;Co więcej, jeśli będziemy działać na raz skompilowanej wersji aplikacji (czyt. nieuruchamianej z Visual Studio), pozostawione zmiany i uwagi zostaną zapisane w przestrzeni &lt;a href="http://jacekciereszko.pl/2008/06/isolated-storage-memory-w-silverlight.html"&gt;Isolated Storage&lt;/a&gt; i będą widoczne gdy następny raz uruchomimy aplikację na tym samym komputerze.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Jeżeli chcemy dokonywać zmian na odległość, np. wysłać prototyp klientowi aby wprowadził na nim swoje uwagi, wystarczy że prześlemy mu aplikację, a on za pomocą opcji exportu, stworzy plik z rozszerzeniem &lt;em&gt;feedback&lt;/em&gt; który później możemy zaimportować do Expression Blenda (przez import rozumiem tutaj dodanie pliku do projektu - "Add Existing Item.." ).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Aby wygenerować wersję aplikacji którą możemy przekazać klientowi, najłatwiej wybrać opcję "File" w menu w Expression Blend 3 i kliknąć "Package SketchFlow Project..". Stworzony projekt jest gotowy do uruchomienia (TestPage.html).&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span xmlns=""&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HHm0WsNFjPo/SliYnqIku1I/AAAAAAAAJY0/8Epq14-uu8g/s1600-h/Menu1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 301px; height: 400px;" src="http://1.bp.blogspot.com/_HHm0WsNFjPo/SliYnqIku1I/AAAAAAAAJY0/8Epq14-uu8g/s400/Menu1.jpg" alt="" id="BLOGGER_PHOTO_ID_5357199563849775954" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;&lt;strong&gt;Demo&lt;/strong&gt;: &lt;a href="http://wpierdalaj.pl/blog_resources/SketchFlow/SketchFlowBlogPrototype/TestPage.html"&gt;link&lt;/a&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Source &lt;/strong&gt;&lt;strong&gt;Code&lt;/strong&gt;: &lt;a href="http://wpierdalaj.pl/blog_resources/SketchFlow/SilverlightPrototypeBlog.zip"&gt;link&lt;/a&gt;&lt;br /&gt;   &lt;/p&gt;&lt;h3&gt;Dokumentacja papierowa&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Jeśli mimo wszystko łatwiej jest nam pracować na "papierowej wersji aplikacji", czyli po prostu print screeny z aplikacji, powinniśmy zwrócić uwagę na opcję "Export to Microsoft Word..". Opcja ta pozwala na wygenerowanie pełnej dokumentacji okien prototypu. Powstały Word zawiera spis treści, spis obrazków oraz mapkę połączeń pomiędzy ekranami (SketchFlow Map). Co więcej możemy także zastosować wordowy template który ma być użyty do wygenerowania dokumentacji.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HHm0WsNFjPo/SliYn1u1aMI/AAAAAAAAJY8/EP6DIbaFVlo/s1600-h/Menu2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 285px; height: 400px;" src="http://3.bp.blogspot.com/_HHm0WsNFjPo/SliYn1u1aMI/AAAAAAAAJY8/EP6DIbaFVlo/s400/Menu2.jpg" alt="" id="BLOGGER_PHOTO_ID_5357199566963042498" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;p&gt;Jeszcze kilka miesięcy temu pamiętam jak robiłem print screeny okien i mapę nawigacji aby przenieść je do Worda, wydrukować i później w grupie znajomych nanosić ręcznie sugerowane poprawki do aplikacji. Teraz wiem że już nie będę musiał tego robić ręcznie. :)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Przykład takiego dokumentu znajdziecie tutaj&lt;/strong&gt;: &lt;a href="http://wpierdalaj.pl/blog_resources/SketchFlow/SketchFlowBlogDoc.doc"&gt;link&lt;/a&gt;&lt;br /&gt;   &lt;/p&gt;&lt;h3&gt;Podsumowanie&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Jak widzicie, mając tak doskonałe narzędzie jesteśmy w stanie tworzyć prototyp aplikacji oraz zmieniać go bez większego nakładu pracy. Ustalanie zawartości jak i wyglądu interfejsu nigdy nie było tak łatwe, a mnogość opcji jakie daje nam nowy Expression Blend 3 wspiera nas na każdym kroku.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Oczywiście SketchFlow dostarcza o wiele więcej innych opcji, jak chociażby animację pomiędzy oknami, czy też tworzenie i zagnieżdżanie własnych "kompozycji" elementów w innych oknach, z którymi także polecam się zapoznać.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;References&lt;br /&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=157184"&gt;Install Microsoft Expression Blend 3 + SketchFlow RC&lt;/a&gt;&lt;br /&gt;    &lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span xmlns=""&gt;&lt;p&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=143571"&gt;Download Silverlight 3 Tools (SDK)&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-3405225439341639089?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/3405225439341639089/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=3405225439341639089' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/3405225439341639089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/3405225439341639089'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2009/07/prototyp-aplikacji-w-silverlight-30-w.html' title='Prototyp aplikacji w Silverlight 3.0 w kilka minut?'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_HHm0WsNFjPo/SliZMNxlaZI/AAAAAAAAJZE/XEFyfeN5EU8/s72-c/NewProject.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-6082145448312621079</id><published>2009-06-22T20:34:00.005+02:00</published><updated>2009-06-23T02:21:39.770+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Speaker Idol'/><category scheme='http://www.blogger.com/atom/ns#' term='konferencja'/><category scheme='http://www.blogger.com/atom/ns#' term='count down control'/><title type='text'>MTS 2009 – zostało coraz mniej czasu..</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;Zostało już tylko kilka dni, aby zarejestrować się na konferencję &lt;a href="http://www.mts2009.pl/"&gt;MTS2009&lt;/a&gt; w promocyjnej cenie &lt;strong&gt;450 PLN&lt;/strong&gt;. Od pierwszego lipca 2009 uczestnictwo w niej będzie kosztować &lt;strong&gt;650 PLN&lt;/strong&gt;, a po 1 września &lt;strong&gt;1500 PLN&lt;/strong&gt;.&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;br /&gt;&lt;iframe src="http://wpierdalaj.pl/blog_resources/MTS2009/SilverlightCountDownTimerExampleTestPage.html" frameborder="0" height="100" scrolling="no" width="220"&gt; Do MTS 2009 zostąło.. &lt;/iframe&gt;&lt;/p&gt;&lt;p&gt; Dodatkowo do 30 czerwca obowiązuje specjalna promocja dla członków społeczności &lt;strong&gt;codeguru.pl&lt;/strong&gt; (&lt;a href="http://www.codeguru.pl/fullnews-4183.aspx"&gt;http://www.codeguru.pl/fullnews-4183.aspx&lt;/a&gt; ) i  &lt;strong&gt;WSS.pl&lt;/strong&gt; (&lt;a href="http://wss.pl/NewsList/1,10929.aspx"&gt;http://wss.pl/NewsList/1,10929.aspx&lt;/a&gt; ). Cena dla tych osób to stówa mniej, czyli &lt;strong&gt;350 PLN&lt;/strong&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HHm0WsNFjPo/Sj_O9RKmpxI/AAAAAAAAIrA/d3H6Twod9-I/s1600-h/mts2009_blog_btnl_3o_180_200.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 180px; height: 200px;" src="http://1.bp.blogspot.com/_HHm0WsNFjPo/Sj_O9RKmpxI/AAAAAAAAIrA/d3H6Twod9-I/s400/mts2009_blog_btnl_3o_180_200.gif" alt="" id="BLOGGER_PHOTO_ID_5350222434314659602" border="0" /&gt;&lt;/a&gt;   &lt;/p&gt;&lt;p&gt;Link do rejestracji: &lt;a href="https://mts2009.pl/rejestracja/"&gt;https://mts2009.pl/rejestracja/&lt;/a&gt;&lt;br /&gt;  &lt;/p&gt;&lt;h2&gt;Speaker Idol&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Korzystając z okazji, chciałem również przypomnieć o odbywającym się w czasie konferencji konkursie Speaker Idol. Zwycięzca otrzyma możliwość prowadzenia własnej prezentacji za rok oraz chwałę na wieki! Link do szczegółów wydarzenia: &lt;a href="http://www.mts2009.pl/agenda/speaker-idol"&gt;http://www.mts2009.pl/agenda/speaker-idol&lt;/a&gt;&lt;br /&gt;  &lt;/p&gt;&lt;p&gt;---&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Ja będę, a ty?&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Jacek Ciereszko &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-6082145448312621079?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/6082145448312621079/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=6082145448312621079' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/6082145448312621079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/6082145448312621079'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2009/06/mts-2009-zostao-co-raz-mniej-czasu.html' title='MTS 2009 – zostało coraz mniej czasu..'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_HHm0WsNFjPo/Sj_O9RKmpxI/AAAAAAAAIrA/d3H6Twod9-I/s72-c/mts2009_blog_btnl_3o_180_200.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-8307570252650322426</id><published>2009-06-01T00:01:00.004+02:00</published><updated>2009-06-02T21:05:21.598+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='konferencja'/><category scheme='http://www.blogger.com/atom/ns#' term='C2C'/><title type='text'>C2C potrzebuje wsparcia</title><content type='html'>&lt;h3 class="post-title entry-title"&gt; &lt;/h3&gt;  &lt;div class="post-body entry-content"&gt; &lt;img style="margin: 0pt 10px 0pt 0px; float: left; width: 133px; height: 163px;" src="http://2009.communities2communities.org.pl/Images/logo_top.png" alt="" border="0" /&gt;&lt;span style="font-weight: bold;"&gt;&lt;h3&gt;Wspomóż C2C!&lt;/h3&gt;&lt;/span&gt;Pamiętasz konferencję C2C? Popierasz idee i życzysz dla konferencji jak najlepiej? To koniecznie przeczytaj poniższą wiadomość od organizatorów:&lt;br /&gt;&lt;br /&gt;"           Przygotowania do konferencji C2C 2009 rozpoczęły się w październiku 2008 roku. Od strony finansowej całe przedsięwzięcie obsługiwać miało stowarzyszenie PDG, które rozliczało również C2C 2008. Na początku 2009 roku PDG zrezygnowało ze współpracy z grupami off-line. Dla organizatorów C2C 2009 oznaczało to brak możliwości zgodnego z prawem rozliczenia konferencji C2C. Na szczęście, dzięki uprzejmości fundacji &lt;a href="http://proidea.org.pl/" title="Fundacja PROIDEA" shape="rect"&gt;PROIDEA&lt;/a&gt;, stan taki nie trwał długo. Konferencja szczęśliwie została zorganizowana. &lt;div id="ctl00_ctl00_mainContentHolder_pageContentID_BlogPosts1_ctl00_ctl00_pnlContent" class="sf_postContent"&gt; &lt;p&gt;Niestety stowarzyszenie PDG do dnia dzisiejszego nie przelało wszystkich środków C2C na konto fundacji PROIDEI. Z tego powodu budżet całego przedsięwzięcia posiada niedobór środków na kwotę ponad 6 000 PLN. Dlatego też zwracamy się do wszystkich osób, którym idea konferencji jest bliska o &lt;a href="mailto:arkadiusz.wasniewski@data.pl" shape="rect"&gt;pomoc&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Jednocześnie chcielibyśmy poinformować, iż organizatorzy C2C 2009 wystąpią na drogę sądową przeciwko stowarzyszeniu PDG w celu odzyskania nieprzekazanych pieniędzy. "&lt;/p&gt;&lt;p&gt;Źródło wiadomości oraz oficjalna treść pod adresem: &lt;a href="http://communities2communities.org.pl/pl/News/09-05-31/Finanse_C2C_2009.aspx"&gt;http://communities2communities.org.pl/pl/News/09-05-31/Finanse_C2C_2009.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Wszelka pomoc finansowa (nawet drobna) będzie mile widziana.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;EDIT&lt;/span&gt;:&lt;/p&gt;&lt;p&gt;Numer konta oraz aktualny stan zebranej kwoty podany jest na stronie &lt;a href="http://zine.net.pl/"&gt;http://zine.net.pl/&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Pozdrawiam,&lt;/p&gt;&lt;p&gt;Jacek Ciereszko&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-8307570252650322426?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/8307570252650322426/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=8307570252650322426' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/8307570252650322426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/8307570252650322426'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2009/06/c2c-potrzebuje-wsparcia.html' title='C2C potrzebuje wsparcia'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-573950787688305683</id><published>2009-05-25T23:43:00.013+02:00</published><updated>2009-05-26T01:01:07.224+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Out Of Browser'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight 3'/><category scheme='http://www.blogger.com/atom/ns#' term='OOB'/><title type='text'>Silverlight 3.0 + Out Of Browser = RDA?</title><content type='html'>W końcu, kiedy ogarnąłem się z dodatkowych zadań (&lt;a href="http://jacekciereszko.pl/2009/05/imagine-cup-2009-recenzja-oczami.html"&gt;Imagine Cup 2009&lt;/a&gt; oraz &lt;a href="http://www.sdjournal.org/prt/view/aktualnosci/issue/997.html"&gt;kwietniowy numer SDJ&lt;/a&gt;) mogę zabrać się za opisywanie wszystkich nowinek Silverlighta 3.0!!! Trochę tego jest, w związku z tym zacznę od tych (moim zdaniem) najciekawszych :)&lt;br /&gt;&lt;span xmlns=""&gt;&lt;h2&gt;Out Of Browser&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Pierwszą nowinką nad która chciałby się skupić jest Out Of Browser (OOB), czyli możliwości instalacji aplikacji RIA na lokalnym komputerze. Tym którzy jeszcze o tym nie słyszeli, przypomnę że od wersji Silverlight 3.0 istnieje możliwość stworzenia aplikacji którą będzie można instalować lokalnie na komputerze i korzystać z niej bez uruchamiania przeglądarki, taki OneClick (dla niektórych Java WebStart). Stąd też  przyszedł mi do głowy tytułowy skrót &lt;strong&gt;RDA&lt;/strong&gt; -&amp;gt; Rich Desktop Application ;)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Opcja ta jest skierowana przed wszystkim do aplikacji które działają w środowisku bez stałego dostępu do Internetu (z ang. Occasionally Connected). W ten sposób możemy używać aplikacji przez cały czas, nawet gdy chwilowo nie mam dostępu do sieci i otworzenie programu w przeglądarce było by nie możliwe.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Demo&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Zaczniemy z grubej rury czyli od istniejącej aplikacji –&lt;strong&gt; &lt;a href="http://joestegman.members.winisp.net/Mix09/LocalChess/"&gt;Run DEMO - Chess&lt;/a&gt;&lt;/strong&gt;!!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Aplikacja ta to szachy stworzone na potrzeby konferencji MIX09, które po zainstalowaniu pozwalają na grę w trybie lokalnym. Aby móc ją zobaczyć i zagrać musimy mieć zainstalowany plugin &lt;a href="http://silverlight.net/getstarted/silverlight3/default.aspx"&gt;Silverlight 3.0&lt;/a&gt; SDK (w obecnej wersji jest to Beta 1 spod adresu &lt;a href="http://go.microsoft.com/fwlink/?LinkID=143571"&gt;link&lt;/a&gt;).&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HHm0WsNFjPo/ShsWXdf8-wI/AAAAAAAAIlk/asseASB62K0/s1600-h/szachy1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 199px; height: 128px;" src="http://3.bp.blogspot.com/_HHm0WsNFjPo/ShsWXdf8-wI/AAAAAAAAIlk/asseASB62K0/s400/szachy1.jpg" alt="" id="BLOGGER_PHOTO_ID_5339886375489305346" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p style="text-align: center;"&gt;   &lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HHm0WsNFjPo/ShsRMgW6zaI/AAAAAAAAIk0/j3C-M4OQEuk/s1600-h/InstallOOBOkno.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 171px;" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/ShsRMgW6zaI/AAAAAAAAIk0/j3C-M4OQEuk/s400/InstallOOBOkno.jpg" alt="" id="BLOGGER_PHOTO_ID_5339880689720020386" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p style="text-align: center;"&gt;   &lt;/p&gt;&lt;p&gt;Grę możemy zainstalować klikać w przycisk "Install Chess Now" lub klikając prawym przyciskiem myszki w aplikacje i wybranie opcji instalacji. W czasie instalacji w systemie operacyjnym Windows mamy do wyboru umieszczenie skrótu do gry na pulpicie lub/i w menu start, natomiast w MACu user ma większą dowolność i może instalować aplikację (skrót) gdzie mu się podoba. W Windows nikt nie zabroni tam także przenieść skrótu do aplikacji w inne miejsce ale nie jest to coś co możemy wybrać podczas instalacji. Jeśli wszystko się uda, to możemy zamknąć przeglądarkę i  uruchomić grę z umieszczonego skrótu.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HHm0WsNFjPo/ShsVqh0R0NI/AAAAAAAAIlc/IBuIbsS-GIs/s1600-h/szachy.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_HHm0WsNFjPo/ShsVqh0R0NI/AAAAAAAAIlc/IBuIbsS-GIs/s400/szachy.jpg" alt="" id="BLOGGER_PHOTO_ID_5339885603554185426" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;Jak zauważyliście w przykładzie, instalacja nie jest tak dowolna jak w przypadku zwykłych aplikacji, a więc do wyboru mamy tylko miejsce wskazania skrótu do aplikacji. Cała reszta  jest schowana przed użytkownikiem i nie pozwala na modyfikację.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Warto wspomnieć, że zainstalowana aplikacja może działać bez dostępu do Internetu i synchronizować swoje dane jak tylko taki dostęp otrzyma. Za przestrzeń do przechowywanie danych możemy wykorzystywać &lt;a href="http://jacekciereszko.pl/2008/06/isolated-storage-memory-w-silverlight.html"&gt;Isolated Storage&lt;/a&gt;, który po instalacji aplikacji pozwala na przechowywanie aż 25MB danych bez pytania o zgodę użytkownika, co w przeciwieństwie do 1MB  gdy uruchamiamy aplikację w przeglądarce, robi różnicę. Pamiętajmy że zawsze możemy zwiększyć tą przestrzeń, o ile użytkownik wyrazi zgodę. (patrz artykuł o &lt;a href="http://jacekciereszko.pl/2008/06/isolated-storage-memory-w-silverlight.html"&gt;Isolated Storage&lt;/a&gt;).&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HHm0WsNFjPo/ShsVqQnCnxI/AAAAAAAAIlE/PkvSEzaMJAY/s1600-h/IsolatedStorageQuota.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 315px;" src="http://1.bp.blogspot.com/_HHm0WsNFjPo/ShsVqQnCnxI/AAAAAAAAIlE/PkvSEzaMJAY/s400/IsolatedStorageQuota.jpg" alt="" id="BLOGGER_PHOTO_ID_5339885598935260946" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;p&gt;Z poziomu aplikacji bardzo szybko możemy także odinstalować grę, klikamy prawym myszki i wybieramy opcję "Remove this application..". Całość jest dość wygodna w użytkowaniu i nie sprawia większych problemów.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Zróbmy swoją aplikację&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;W celu demonstracji jak łatwe jest włączenie opcji instalacji RIA na komputerze lokalnym, stworzymy prostą aplikację  "Witaj Świecie" która oprócz przywitania się będzie pokazywać czy jest uruchamiana w przeglądarce oraz czy ma dostęp do Internetu.&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;I. Podstawowa instalacja&lt;br /&gt;&lt;/h4&gt;&lt;p&gt;Pierwszym krokiem jest otwarcie Visual Studio  oraz wybranie nowego projektu &lt;span style="font-style: italic;"&gt;SilverlightApplication &lt;/span&gt;(może to być także inny typ projektu Silverlight, ale to akurat nie ma znaczenia).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Aby aplikacja mogą być instalowana, program musi być do tego specjalnie stworzony dlatego też otwieramy plik "AppManifest.xaml" z katalogu "&lt;em&gt;Properties&lt;/em&gt;". Jeśli mamy zainstalowaną wersję Silverlight 3.0, powinniśmy zobaczyć w środku trochę wykomentowanego kodu.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HHm0WsNFjPo/ShsRL_t9wDI/AAAAAAAAIkU/ECRn4Dozjqo/s1600-h/AppManifest.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 343px; height: 400px;" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/ShsRL_t9wDI/AAAAAAAAIkU/ECRn4Dozjqo/s400/AppManifest.jpg" alt="" id="BLOGGER_PHOTO_ID_5339880680958312498" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;lt;Deployment.ApplicationIdentity&amp;gt;&lt;br /&gt;   &amp;lt;ApplicationIdentity&lt;br /&gt;      ShortName="Out of Browser Silverlight Application"&lt;br /&gt;      Title="Window Title of Your Silverlight Application"&amp;gt;&lt;br /&gt;      &amp;lt;ApplicationIdentity.Blurb&amp;gt;Description of your Silverlight application&amp;lt;/ApplicationIdentity.Blurb&amp;gt;&lt;br /&gt;   &amp;lt;/ApplicationIdentity&amp;gt;&lt;br /&gt;&amp;lt;/Deployment.ApplicationIdentity&amp;gt;   &lt;/pre&gt;&lt;p&gt;Kod ten odpowiada właśnie za włączenie opcji instalacji aplikacji RIA. Wystarczy że odkomentujemy go i nasza aplikacja może być od tej pory instalowana na lokalnym komputerze.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Zanim uruchomimy po raz pierwszy program, dodajmy prosty TextBlock w pliku MainPage.xaml, tak abyśmy widzieli że aplikacja działa.&lt;br /&gt;&lt;/p&gt;&lt;pre class="prettyprint"&gt;&amp;lt;UserControl x:Class="SilverlightOOBApplication.MainPage"&lt;br /&gt; xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt; xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt; Width="400" Height="300"&amp;gt;&lt;br /&gt;    &amp;lt;Grid x:Name="LayoutRoot" Background="White"&amp;gt;&lt;br /&gt;       &amp;lt;TextBlock Text="Witaj Świecie" /&amp;gt;&lt;br /&gt;    &amp;lt;/Grid&amp;gt;&lt;br /&gt;&amp;lt;/UserControl&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Teraz możemy uruchomić program. Klikamy prawym przyciskiem myszki w aplikacji i wybieramy "&lt;em&gt;Install Out of Browser Silverlight …&lt;/em&gt; onto this computer"&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HHm0WsNFjPo/ShsVqFSf24I/AAAAAAAAIk8/fDFx7HNxmzI/s1600-h/InstallOOBPrawyMyszki.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 228px;" src="http://1.bp.blogspot.com/_HHm0WsNFjPo/ShsVqFSf24I/AAAAAAAAIk8/fDFx7HNxmzI/s400/InstallOOBPrawyMyszki.jpg" alt="" id="BLOGGER_PHOTO_ID_5339885595896306562" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;p&gt;Następnie wybieramy gdzie chcemy aby pojawił się skrót do zainstalowanej aplikacji, czy ma być to pasek menu czy skrót na pulpicie i zatwierdzamy.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HHm0WsNFjPo/ShsRMgW6zaI/AAAAAAAAIk0/j3C-M4OQEuk/s1600-h/InstallOOBOkno.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 171px;" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/ShsRMgW6zaI/AAAAAAAAIk0/j3C-M4OQEuk/s400/InstallOOBOkno.jpg" alt="" id="BLOGGER_PHOTO_ID_5339880689720020386" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;&lt;span xmlns=""&gt;&lt;p style="text-align: center;"&gt;   &lt;/p&gt;&lt;/span&gt;   &lt;/p&gt;&lt;p&gt;W tym momencie powinien pojawić się nasz HelloWorld w okienku. Jeśli zamkniemy program i udamy się na pulpit lub menu start, znajdziemy tam skrót do naszej aplikacji. Wystarczy odpalić go jak zwykły program aby zobaczyć że nasz program działa tak samo ale bez uruchamiania przeglądarki.&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;II. Dostosujmy instalacje do naszych potrzeb&lt;br /&gt;&lt;/h4&gt;&lt;p&gt;Przede wszystkim możemy dostosować takie parametry jak krótki opis aplikacji (&lt;em&gt;ShortName&lt;/em&gt;) który używany jest chociażby do podpisania skrótu na pulpicie do aplikacji. Tytuł aplikacji (&lt;em&gt;Title&lt;/em&gt;) pojawiający się miedzy innymi w oknie aplikacji którą uruchamiamy offline lub podczas instalacji oraz parametr większego opisu (&lt;em&gt;ApplicationIdentity.Blurb&lt;/em&gt;) używany jako treść tooltipów.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;W celu przetestowania ustawmy &lt;em&gt;ShortName&lt;/em&gt; na  np. "Welcome App", tytuł na "Witam w aplikacji powitalnej" oraz &lt;em&gt;ApplicationIdentity.Blurb&lt;/em&gt; na "To jest aplikacja powitalna", tak jak w zamieszczonym przykładzie poniżej.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;AppManifest.xaml:&lt;br /&gt;&lt;/p&gt;&lt;pre class="prettyprint"&gt;&amp;lt;Deployment.ApplicationIdentity&amp;gt;&lt;br /&gt;  &amp;lt;ApplicationIdentity&lt;br /&gt;     ShortName="Welcome App"&lt;br /&gt;     Title="Witam w aplikacji powitalnej"&amp;gt;&lt;br /&gt;     &amp;lt;ApplicationIdentity.Blurb&amp;gt;To jest aplikacja powitalna&amp;lt;/ApplicationIdentity.Blurb&amp;gt;&lt;br /&gt;  &amp;lt;/ApplicationIdentity&amp;gt;&lt;br /&gt;&amp;lt;/Deployment.ApplicationIdentity&amp;gt;&lt;/pre&gt;&lt;p&gt;Dodatkowo warto pokusić się o własne ikonki. Wstawianie ich jest banalnie proste i jedyne co musimy dostarczyć to obrazki oraz odpowiednie wpisy w pliku AppManifest.xaml. Dostarczane obrazki mogą być typu &lt;em&gt;png&lt;/em&gt; i wystarczy je umieścić w projekcie oraz dołączyć w pliku xml. &lt;strong&gt;Uwaga&lt;/strong&gt;, dodane ikonki należy ustawić jako "&lt;strong&gt;&lt;em&gt;Content&lt;/em&gt;&lt;/strong&gt;" w projekcie, a nie "&lt;em&gt;Resource&lt;/em&gt;". Aby to zmienić, klikamy prawym myszki na ikonce w Visual Studio i przestawiamy wartość "&lt;em&gt;Build Action&lt;/em&gt;" na "&lt;em&gt;Content&lt;/em&gt;".&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span xmlns=""&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HHm0WsNFjPo/ShsRL3H_hpI/AAAAAAAAIkc/vzh7vgCpDO8/s1600-h/CustomizationAppIcons.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 360px; height: 400px;" src="http://4.bp.blogspot.com/_HHm0WsNFjPo/ShsRL3H_hpI/AAAAAAAAIkc/vzh7vgCpDO8/s400/CustomizationAppIcons.jpg" alt="" id="BLOGGER_PHOTO_ID_5339880678651561618" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HHm0WsNFjPo/ShsRMNXHNhI/AAAAAAAAIkk/OanEVGCDnPk/s1600-h/CustomizationAppIcons2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 342px; height: 296px;" src="http://1.bp.blogspot.com/_HHm0WsNFjPo/ShsRMNXHNhI/AAAAAAAAIkk/OanEVGCDnPk/s400/CustomizationAppIcons2.jpg" alt="" id="BLOGGER_PHOTO_ID_5339880684620559890" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;p&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;Ikonki dodajemy w 4 różnych rozmiarach w celu dostarczenia odpowiednich obrazków dla okna instalacji, skrótu na pulpicie, w menu start itd. W pełni zmodyfikowany kod pliku AppManifest.xaml może wyglądać np. tak:&lt;br /&gt;&lt;/p&gt;&lt;pre class="prettyprint"&gt;&amp;lt;Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"&lt;br /&gt;xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&amp;gt;&lt;br /&gt;  &amp;lt;Deployment.Parts&amp;gt;    &amp;lt;/Deployment.Parts&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;Deployment.ApplicationIdentity&amp;gt;&lt;br /&gt;     &amp;lt;ApplicationIdentity ShortName="Welcome App" Title="Witam w aplikacji powitalnej"&amp;gt;&lt;br /&gt;      &amp;lt;ApplicationIdentity.Blurb&amp;gt;To jest aplikacja powitalna&amp;lt;/ApplicationIdentity.Blurb&amp;gt;&lt;br /&gt;      &amp;lt;ApplicationIdentity.Icons&amp;gt;&lt;br /&gt;        &amp;lt;Icon Size="16x16"&amp;gt;images/icons/user-16.png&amp;lt;/Icon&amp;gt;&lt;br /&gt;        &amp;lt;Icon Size="32x32"&amp;gt;images/icons/user-32.png&amp;lt;/Icon&amp;gt;&lt;br /&gt;        &amp;lt;Icon Size="48x48"&amp;gt;images/icons/user-48.png&amp;lt;/Icon&amp;gt;&lt;br /&gt;        &amp;lt;Icon Size="128x128"&amp;gt;images/icons/user-128.png&amp;lt;/Icon&amp;gt;&lt;br /&gt;      &amp;lt;/ApplicationIdentity.Icons&amp;gt;&lt;br /&gt;     &amp;lt;/ApplicationIdentity&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;/Deployment.ApplicationIdentity&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/Deployment&amp;gt; &lt;/pre&gt;&lt;h4&gt;III. Świadomość aplikacji o aktualnym stanie instalacji&lt;br /&gt;&lt;/h4&gt;&lt;p&gt;W celu wykrycia czy aplikacja została uruchomiona lokalnie, wystarczy w pliku App.xaml.cs w metodzie obsługi eventu "&lt;span style=";font-family:Courier New;font-size:10;"  &gt;&lt;em&gt;Startup&lt;/em&gt;&lt;/span&gt;" dodać sprawdzenie na zmiennej "&lt;/p&gt;&lt;pre class="prettyprint"&gt;Application.Current.RunningOffline&lt;/pre&gt;".&lt;br /&gt;&lt;pre class="prettyprint"&gt;public partial class App : Application&lt;br /&gt;{&lt;br /&gt;  public App()&lt;br /&gt;  {&lt;br /&gt;      this.Startup += this.Application_Startup;&lt;br /&gt;      ...&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  private void Application_Startup(object sender, StartupEventArgs e)&lt;br /&gt;  {&lt;br /&gt;      if (Application.Current.RunningOffline)&lt;br /&gt;      {&lt;br /&gt;          this.RootVisual = new OfflinePage();&lt;br /&gt;      }&lt;br /&gt;      else&lt;br /&gt;      {&lt;br /&gt;          this.RootVisual = new MainPage();&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;A więc zmienna "&lt;em&gt;RunningOffline&lt;/em&gt;" dostarczy nam informacji o trybie pracy aplikacji i np. jak w powyższym przykładzie pozwoli na wybranie odpowiedniego wygląda aplikacji.&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;IV. Świadomość aplikacji o aktualnym stanie połączenia z Internetem&lt;br /&gt;&lt;/h4&gt;&lt;p&gt;Aby pozyskać informację o tym czy aplikacja ma podłączenie do Internetu, wykorzystamy klasę "&lt;em&gt;NetworkInterface&lt;/em&gt;", a dokładnie jej metodę "&lt;em&gt;NetworkInterface.GetIsNetworkAvailable()&lt;/em&gt;". Metoda ta zwraca wartość typu bool która informuje nas o tym czy połączenie do Internetu jest możliwe.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Dodatkowo możemy chcieć żeby aplikacja wykonała powyższe sprawdzenie w momencie gdy dostęp do Internetu się pojawia lub znika. W tym celu możemy wykorzystać event z klasy "&lt;em&gt;NetworkChange.NetworkAddressChanged&lt;/em&gt;".  Obie powyższe klasy są zadeklarowane w namespace "&lt;em&gt;System.Net.NetworkInformation&lt;/em&gt;".&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Spójrzmy na przykładowy kod który możemy umieścić np. w klasie MainPage.xaml.cs:&lt;br /&gt;&lt;/p&gt;&lt;pre class="prettyprint"&gt;public MainPage()&lt;br /&gt;{&lt;br /&gt;   InitializeComponent();&lt;br /&gt;   NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(OnNetworkChange);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void OnNetworkChange(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;   if (NetworkInterface.GetIsNetworkAvailable())&lt;br /&gt;   {       &lt;br /&gt;       // połączenie instnieje...&lt;br /&gt;   }&lt;br /&gt;   else&lt;br /&gt;   {&lt;br /&gt;       // brak połączenia&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;W konstruktorze dodajemy obsługę eventu zmiany połączenia, a w metodzie "&lt;em&gt;OnNetworkChange&lt;/em&gt;" obsługujemy to zdarzenie. Aplikacja sprawdza czy istnieje połączenie i według tego podejmuje odpowiedni kroki.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Warto zwrócić tutaj uwagę na sytuację gdy mamy dwa dostępne połączenia. Gdy jedno "padnie" to w/w event zostanie wywołany ale metoda "&lt;em&gt;NetworkInterface.GetIsNetworkAvailable()&lt;/em&gt;" wciąż zwróci true ze względu na to że istnieje wciąż inne połączenie. W związku z tym wszelkie przełączanie dostępności według np. flagi nie ma tutaj sensu i może powodować niepotrzebne błędy w działaniu programów.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Dodatkowo połączenie do sieci w której nie ma Internetu to także połączenie. Jest to ogromna wada całego tego rozwiązania ale może w kolejnych wersjach będzie to poprawione.&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;V. Automatyczne aktualizacje aplikacji&lt;br /&gt;&lt;/h4&gt;&lt;p&gt;Pewnie część z Was zastanawia się już co z aktualizacją wersji aplikacji, w jaki sposób poradzić sobie z aktualizacją programów. Otóż OOB w Silverlight załatwia nam to z automatu, kiedy pojawia się nowsza wersja, zostaje ona pobrana i zainstalowana przy kolejnym uruchomieniu. Taki mechanizm jest bardzo wygodny i zapewnia spójność wersji programów zainstalowanych lokalnie oraz tych działających online. Dodatkowo możemy poinformować użytkownika o nowych wersjach poprzez skorzystanie z eventu &lt;/p&gt;&lt;pre class="prettyprint"&gt;ExecutionStateChanged i App.Current.ExecutionState&lt;/pre&gt;.&lt;br /&gt;&lt;p&gt;App.xaml.cs:&lt;br /&gt;&lt;/p&gt;&lt;pre class="prettyprint"&gt;public App()&lt;br /&gt;{&lt;br /&gt;   ..&lt;br /&gt;   this.ExecutionStateChanged += new EventHandler(App_ExecutionStateChanged);&lt;br /&gt;   ..&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void App_ExecutionStateChanged(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;   if (App.Current.ExecutionState == ExecutionStates.DetachedUpdatesAvailable)&lt;br /&gt;   {&lt;br /&gt;       MessageBox.Show("Ukazała się nowsza wersja programu. Proszę zrestartować aplikację.");&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;"ExecutionStateChanged" zostaje wywołany zawsze gdy stan aplikacji się zmienia. Warto zwrócić uwagę że "&lt;span style="color: rgb(43, 145, 175);font-family:Courier New;font-size:10;"  &gt;&lt;em&gt;ExecutionStates&lt;/em&gt;&lt;/span&gt;" posiada także atrybuty takie jak "&lt;em&gt;Detached&lt;/em&gt;", "&lt;em&gt;DetachFailed&lt;/em&gt;", "&lt;em&gt;Detaching&lt;/em&gt;" oraz "&lt;em&gt;RunningOnline&lt;/em&gt;" które możemy sprawdzić gdy stan aplikacji się zmieni i wykonać odpowiednie operację. Np. gdy instalacja aplikacji lokalnie się nie powiedzie, metoda "&lt;span style=";font-family:Courier New;font-size:10;"  &gt;&lt;em&gt;ExecutionStateChanged&lt;/em&gt;&lt;/span&gt;" zostanie wywołana, a stan "&lt;span style=";font-family:Courier New;font-size:10;"  &gt;&lt;em&gt;ExecutionState&lt;/em&gt;&lt;/span&gt;" zostanie ustawiony na "DetachFailed". W tym momencie możemy wykonać dowolną operację która rozwiąże problem lub zasugeruje użytkownikowi inne rozwiązanie. To samo tyczy się pozostałych stanów.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Jak widzimy, taki typ obsługi daje nam skuteczny mechanizm zarządzania instalacją aplikacji  i przełączania jej trybów działania.&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;Online Sample&lt;br /&gt;&lt;/h4&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span xmlns=""&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HHm0WsNFjPo/ShsRMc_-GpI/AAAAAAAAIks/tk25X6hYnf0/s1600-h/DemoApplication.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 202px;" src="http://1.bp.blogspot.com/_HHm0WsNFjPo/ShsRMc_-GpI/AAAAAAAAIks/tk25X6hYnf0/s400/DemoApplication.jpg" alt="" id="BLOGGER_PHOTO_ID_5339880688818461330" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;span xmlns=""&gt;&lt;p&gt;   &lt;/p&gt;&lt;p&gt;Powyższą aplikację możemy zobaczyć pod adresem: (wymagany Silverlight 3.0 Beta 1) &lt;a href="http://wpierdalaj.pl/blog_resources/OOB/demo/SilverlightOOBApplicationTestPage.html"&gt;Live DEMO&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Kod źródłowy dostępny jest pod adresem: &lt;a href="http://wpierdalaj.pl/blog_resources/OOB/SilverlightOOBApplication.zip"&gt;link&lt;/a&gt;&lt;strong&gt;&lt;br /&gt;    &lt;/strong&gt;&lt;/p&gt;&lt;h2&gt;Wnętrze&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Od strony zaplecza, cały mechanizm działa na zasadzie zrzutu aplikacji Silverlight do przestrzenie użytkownika i nadaniu mu unikatowego numeru. Numer ten jest wykorzystywany do uruchamiania aplikacji. Sam proces uruchamiania odbywa się za pomocą pliku &lt;strong&gt;sllauncher.exe&lt;/strong&gt; znajdującego się w plikach zainstalowanego plug-ina Silverlighta (zwykle jest to katalog: &lt;em&gt;C:\Program Files\Microsoft Silverlight\3.0.40307.0\sllauncher.ex&lt;/em&gt;e).&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HHm0WsNFjPo/ShsVqZz5GoI/AAAAAAAAIlM/xsO_dygxQD0/s1600-h/SLLanucher.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 314px;" src="http://4.bp.blogspot.com/_HHm0WsNFjPo/ShsVqZz5GoI/AAAAAAAAIlM/xsO_dygxQD0/s400/SLLanucher.jpg" alt="" id="BLOGGER_PHOTO_ID_5339885601405082242" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Jeśli przyjrzymy się na przykład skrótowi z pulpitu do aplikacji, zobaczymy coś w stylu:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;C:\Program Files\Microsoft Silverlight\&amp;lt;wersja&amp;gt;\sllauncher.exe &amp;lt;adres.id&amp;gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Gdzie "&lt;em&gt;wersja&lt;/em&gt;" to numer aktualnej wersji Silverlighta (w chwili pisania tego artykułu jest to 3.0.40307.0), a numer "&lt;em&gt;adres.id&lt;/em&gt;" to adres strony i numer nadany dla aplikacji. Taki skrót może wyglądać np. tak:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;"C:\Program Files\Microsoft Silverlight\3.0.40307.0\sllauncher.exe" localhost.4&lt;/em&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;lub&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;"C:\Program Files\Microsoft Silverlight\3.0.40307.0\sllauncher.exe" www.jacekciereszko.pl.2&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;W Windows Vista naszą zapisaną aplikację możemy znaleźć na przykład pod adresem&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;"C:\Users\&amp;lt;nazwa użytkownika&amp;gt;\AppData\LocalLow\Microsoft\Silverlight\Offline\&amp;lt;adres.id&amp;gt;"&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt; gdzie mechanizmy Silverlighta przechowują pliki xap, html i jeszcze kilka plików. W innych systemach operacyjnych adres ten zapewne będzie inny, ale w żaden sposób nie będzie nam potrzebny do pracy z programem, a więc nie martwcie się jeśli nie dogrzebiecie się do swojego repozytorium.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Należy pamiętać że aplikacja przez cały czas pozostaje uruchomiona w sandbox-się, a więc po instalacji na komputerze nie otrzymuje żadnych dodatkowych uprawnień i jest traktowana tak samo jak ta uruchamiana w przeglądarce. Zaletą tego rozwiązania jest to, że użytkownik nie potrzebuje praw administratora do instalacji aplikacji.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Tak jak wspomniałem powyżej, zainstalowana aplikacja może mieć świadomość tego czy komputer jest podłączony do Internetu, działać gdy takiego połączenia nie ma oraz być powiadamiana o zmianie jego statusu. To ostatnie wydaje się szczególnie ważne, gdy tworzymy aplikację która będzie gromadzić dane i synchronizować je okazjonalnie (tzw. emisariusze). Mechanizm ten jest także wykorzystywany do update-ów aplikacji i obsługiwany automatycznie  przez mechanizmy Silverlighta. Tak jak wspominałem powyżej, aplikacja która wykryła nowszą wersję, pobiera ją i instaluje przy kolejnym uruchomieniu aplikacji.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Wygląd&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Aby wyjść naprzeciw oczekiwaniom użytkownika, Microsoft pozwoli nam customizować nasze aplikację w zależności od tego czy jest ona zainstalowana czy uruchamiana z przeglądarki. A więc na przykład w wersje uruchamianej w przeglądarce, umieścić tylko przycisk instalacji, a w wersji zainstalowanej całą aplikację, tak jak to widzieliśmy na przykładzie gry w szachy.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;W tej wersji Silverlighta, okno uruchomieniowe programów zainstalowanych lokalnie pozwala tylko na ustawienie ikonki, tytułu oraz pozycji na ekranie. Jak podaje Microsoft, więcej opcji dostosowywania wyglądu okna pojawi się w kolejnych wersjach.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Debuger&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Pierwszym poważnym problemem na który natknąłem się był brak debuggera. News o tym znalazłem na stronie transcriptu z jednej z sesji MIX09. Szybko jednak doinformowano mnie o zapomnianym  "Attach Process" z VS który prawie idealnie rozwiązuje problem. Prawie, ponieważ nie jest to wygodne i trochę utrudnia pracę (np. podłączenie aplikacji do procesu).&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HHm0WsNFjPo/Shsg5p_R9TI/AAAAAAAAIls/__DMTDNFA_A/s1600-h/AttachProcess.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 274px;" src="http://1.bp.blogspot.com/_HHm0WsNFjPo/Shsg5p_R9TI/AAAAAAAAIls/__DMTDNFA_A/s400/AttachProcess.jpg" alt="" id="BLOGGER_PHOTO_ID_5339897958073759026" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;h2&gt;Ograniczenia&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Ponieważ w planie miałem stworzenie aplikacji która instaluje się lokalnie na komputerze klienta, oraz obsługuje Silverlight Navigation i kontrolkę &lt;a href="https://connect.microsoft.com/silverlightmapcontrolctp"&gt;Silverlight Virtual Earth Map Control&lt;/a&gt;, szybko przekonałem się że nie wszystko będzie działać. Należy pamiętać, że po instalacji aplikacji na komputerze lokalnym trochę rzeczy jednak się zmienia i np. komunikowanie się z mapą staje się niemożliwe ze względu na brak "współpracy" z HTML DOM. Sugerował bym najpierw upewnić czy to co chcemy zrobić zadziała (małe PoC) zanim zaplanujemy całe rozwiązanie.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Resources&lt;br /&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Wspaniały screencast Tim Heuera pokazujący krok po korku jak stworzyć aplikacje OOB – &lt;a href="http://silverlight.net/learn/learnvideo.aspx?video=187318"&gt;link&lt;/a&gt;,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Strona z szachami - &lt;a href="http://joestegman.members.winisp.net/Mix09/LocalChess/"&gt;link&lt;/a&gt;,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Szereg artykułów na temat OOB – &lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-local.html"&gt;link&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;Live demo stworzonej aplikacji: &lt;a href="http://wpierdalaj.pl/blog_resources/OOB/demo/SilverlightOOBApplicationTestPage.html"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Kod źródłowy dostępny jest pod adresem: &lt;a href="http://wpierdalaj.pl/blog_resources/OOB/SilverlightOOBApplication.zip"&gt;link&lt;/a&gt;&lt;/p&gt;&lt;pre&gt;Pozdrawiam&lt;br /&gt;Jacek Ciereszko&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-573950787688305683?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/573950787688305683/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=573950787688305683' title='Komentarze (4)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/573950787688305683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/573950787688305683'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2009/05/silverlight-30-out-of-browser-rda.html' title='Silverlight 3.0 + Out Of Browser = RDA?'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_HHm0WsNFjPo/ShsWXdf8-wI/AAAAAAAAIlk/asseASB62K0/s72-c/szachy1.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-2906550036816375913</id><published>2009-05-21T23:57:00.005+02:00</published><updated>2009-05-22T22:27:05.861+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight 3'/><title type='text'>VS 2010, a wybór używanej wersji Silverlighta</title><content type='html'>Wreszcie od wersji Visual Studio 2010 mamy wybór w której wersji SDK chcemy tworzyć aplikację! Co nam to daje? Chociażby jednoczesną możliwość pracy z wersjami Beta  oraz wersjami stabilnymi, bez konieczności stawiania oddzielnego środowiska czy tez deinstalacji którejś z wersji.&lt;br /&gt;&lt;span xmlns=""&gt;&lt;p&gt;Ponieważ VS 2010 to jeszcze wersja beta, instalacja jest trochę utrudniona. Otóż należy:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Przede wszystkim zainstalować &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=85520793-68fc-4361-a8b6-dc2cff49c8d2&amp;amp;displaylang=en"&gt;Visual Studio 2010&lt;/a&gt; (obecnie Beta 1)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Następnie instalujemy SDK dla Silverlight 2.0 (&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=8D933343-038F-499C-986C-C3C7E87A60B3&amp;amp;displaylang=en"&gt;Silverlight 2 SDK&lt;/a&gt;). Tu ważne żeby nie pomylić instalacji z wersją "toolsów" ponieważ możemy otrzymać błędy.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Kolejnym krokiem jest instalacja SDK dla wersji 3.0 (&lt;a href="http://go.microsoft.com/fwlink/?LinkID=143435"&gt;Silverlight 3 Beta SDK&lt;/a&gt;). Tu także uwaga na wersję "toolsów" (Silverlight 3 Beta Tools for Visual Studio) - nie pomylić.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I na końcu instalujemy Runtime (&lt;a href="http://go.microsoft.com/fwlink/?LinkID=143433"&gt;Silverlight 3 Beta Developer Runtime&lt;/a&gt;).&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Po tak przeprowadzonej instalacji powinniśmy mieć możliwość wyboru SDK podczas tworzenia projektu. Co więcej, nowy Visual Studio 2010 pozwala także na zmianę wersję w trakcie tworzenia aplikacji. Wystarczy przełączyć tą opcję w ustawieniach projektu.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span xmlns=""&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HHm0WsNFjPo/ShcJkIWcVBI/AAAAAAAAId8/44HxC9LneTs/s1600-h/wyborWersji.jpg"&gt;&lt;span&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;span xmlns=""&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HHm0WsNFjPo/ShcJkQ9jqhI/AAAAAAAAIeM/KC7uOiz3AvE/s1600-h/Properties.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 257px; height: 400px;" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/ShcJkQ9jqhI/AAAAAAAAIeM/KC7uOiz3AvE/s400/Properties.jpg" alt="" id="BLOGGER_PHOTO_ID_5338746401904110098" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span xmlns=""&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HHm0WsNFjPo/ShcJkgpwAwI/AAAAAAAAIeU/K_XtzMMbpjU/s1600-h/PropertiesWybor.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 251px;" src="http://4.bp.blogspot.com/_HHm0WsNFjPo/ShcJkgpwAwI/AAAAAAAAIeU/K_XtzMMbpjU/s400/PropertiesWybor.jpg" alt="" id="BLOGGER_PHOTO_ID_5338746406116000514" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;Aby sprawdzić że wszystko działa, uruchommy nowego Visual Studio 2010 Beta 1 i wybierzmy nowy projekt "&lt;strong&gt;Silverlight Application&lt;/strong&gt;".&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span xmlns=""&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HHm0WsNFjPo/ShcJka3Z2LI/AAAAAAAAIeE/equhcrSCnz8/s1600-h/NewProejct.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 253px;" src="http://4.bp.blogspot.com/_HHm0WsNFjPo/ShcJka3Z2LI/AAAAAAAAIeE/equhcrSCnz8/s400/NewProejct.jpg" alt="" id="BLOGGER_PHOTO_ID_5338746404562655410" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;p&gt;Jeśli rozwiniemy listę wersji w oknie wyboru (patrz screen) zobaczymy że możemy wskazać tą która nam najbardziej pasuje w danym momencie.&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span xmlns=""&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HHm0WsNFjPo/ShcJkIWcVBI/AAAAAAAAId8/44HxC9LneTs/s1600-h/wyborWersji.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 266px;" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/ShcJkIWcVBI/AAAAAAAAId8/44HxC9LneTs/s400/wyborWersji.jpg" alt="" id="BLOGGER_PHOTO_ID_5338746399592567826" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;h2&gt;Podsumowując&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Jeśli chodzi o ogólne wrażenie nowego VS 2010 to jest przyjemny i wygodny, jednak braki związane z Silverlightem + wersją Beta 1 wciąż skłaniają mnie do używania VS 2008, przynajmniej dopóki oficjalna wersja VS 2010 nie będzie dostępna.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Resources&lt;br /&gt;&lt;/h2&gt;&lt;ul style="margin-left: 54pt;"&gt;&lt;li&gt;Blog Alberta Pascula: &lt;a href="http://weblogs.asp.net/albertpascual/archive/2009/03/22/silverlight-and-wpf-future-the-death-of-asp-net.aspx"&gt;http://weblogs.asp.net/albertpascual/archive/2009/03/22/silverlight-and-wpf-future-the-death-of-asp-net.aspx&lt;/a&gt;&lt;br /&gt;    &lt;/li&gt;&lt;li&gt;Blog Tim Heuera: &lt;a href="http://timheuer.com/blog/archive/2009/05/20/silverlight-and-visual-studio-2010-beta.aspx"&gt;http://timheuer.com/blog/archive/2009/05/20/silverlight-and-visual-studio-2010-beta.aspx&lt;/a&gt;&lt;br /&gt;    &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Pozdrawiam,&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Jacek Ciereszko&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-2906550036816375913?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/2906550036816375913/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=2906550036816375913' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/2906550036816375913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/2906550036816375913'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2009/05/vs-2010-wybor-uzywanej-wersji.html' title='VS 2010, a wybór używanej wersji Silverlighta'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_HHm0WsNFjPo/ShcJkQ9jqhI/AAAAAAAAIeM/KC7uOiz3AvE/s72-c/Properties.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-4640100417973230855</id><published>2009-05-18T00:03:00.006+02:00</published><updated>2009-05-18T01:07:30.659+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='konkurs'/><category scheme='http://www.blogger.com/atom/ns#' term='imaginecup'/><title type='text'>Imagine Cup 2009 – relacja uczestnika</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;W tym roku po raz pierwszy zdecydowałem się wziąć udział w konkursie ImagineCup 2009 w kategorii "Projektowanie oprogramowania". Konkurs w Polsce dobiegł końca, nagrody rozdane, zwycięzcy wybrani, w związku z tym czas na małe podsumowanie całej imprezy.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Mówiąc w skrócie, konkurs polega na stworzeniu ciekawej aplikacji która oprócz swojej innowacyjności ma uratować świat - przynajmniej takie jest założenie :). Uczestnicy mieli za zadanie zmierzyć się z celami ustalonymi przez ONZ, a było to 8 celów milenijnych (&lt;a href="http://www.un.org/millenniumgoals/"&gt;Milenijne Cele Rozwoju&lt;/a&gt;), a hasło przewodnie konkursu brzmiało "&lt;em&gt;Wyobraź sobie świat, w którym technologia pomaga rozwiązać najtrudniejsze problemy ludzkości&lt;/em&gt;".&lt;/p&gt;&lt;p&gt;Nie chciałbym opisywać idei imprezy ponieważ więcej i lepiej możemy znaleźć w Internecie, dlatego po więcej szczegółów odsyłam na strony: &lt;a href="http://www.microsoft.com/poland/edukacja/imaginecup/"&gt;imaginecup.pl&lt;/a&gt;,  &lt;a href="http://imaginecup.com/"&gt;imaginecup.com&lt;/a&gt;, &lt;a href="http://nt.interia.pl/raport/imaginecup-2009/imagine-cup-2009/news/polscy-mistrzowie-imagine-cup-2009,1306379,"&gt;Interia&lt;/a&gt;, &lt;a href="http://wss.pl/NewsList/1,10863.aspx"&gt;WSS&lt;/a&gt;, &lt;a href="http://iwp.com.pl/pressroom/Final-polskiej-edycji-konkursu-Microsoft-Imagine-Cup-2009/1"&gt;IWP&lt;/a&gt;, &lt;a href="http://www.iwp.com.pl/imagine-cup"&gt;IWP2&lt;/a&gt; , a sam skupie się na własnej relacji :]&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Zmagania drużyny RHEA&lt;/h2&gt;&lt;p&gt;Jak się zapewne domyślanie, drużyna do której mam zaszczyt należeć nazywa się RHEA i reprezentuje Politechnikę Białostocką. W skład drużyny wchodzą:&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span xmlns=""&gt;&lt;p&gt;&lt;span&gt;&lt;span xmlns=""&gt;&lt;h3&gt;&lt;span&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h2&gt;&lt;span&gt;&lt;span xmlns=""&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HHm0WsNFjPo/ShCP_w624ZI/AAAAAAAAIcc/OrNt6JxSrA0/s1600-h/DSCF0701.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_HHm0WsNFjPo/ShCP_w624ZI/AAAAAAAAIcc/OrNt6JxSrA0/s320/DSCF0701.JPG" alt="" id="BLOGGER_PHOTO_ID_5336923884060336530" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;span xmlns=""&gt;&lt;b&gt;Agata Grzybek, Joanna Wacław&lt;span&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;/span&gt;, Arkadiusz Kondratiuk oraz ja – Jacek Ciereszko.&lt;br /&gt;&lt;/b&gt;&lt;p&gt;Naszym mentorem był &lt;strong&gt;Marcin&lt;/strong&gt; &lt;strong&gt;Bartoszuk&lt;/strong&gt;, a super grafikiem &lt;strong&gt;Krystian&lt;/strong&gt; &lt;strong&gt;Karpiuk&lt;/strong&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Nasza przygoda z imagine cup rozpoczęła się w listopadzie gdzie przypadkowy pomysł przeniesienia siatek centylowych do sprawdzania stanu rozwoju dziecka do świata elektronicznego, stał się czymś więcej niż tylko pomysłem i zwykłym projektem na uczelni. Do początku grudnia skompletowaliśmy drużynę, mentora oraz grafika i maszyna ruszyła!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Na początku, gdy terminy były jeszcze bardzo daleko, robota szła bardzo powoli, a leniwe święta wcale nam nie pomagały. Na szczęście pierwszy termin oddania zarysu pomysły na tworzoną aplikację mijał 19 stycznia, co zmusiło nas już do mobilizacji. W tym momencie mieliśmy także zrobiony klikalny prototyp aplikacji desktopowej z ustaloną zawartością ekranów oraz ich kolejnością.&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;Po 19 stycznia&lt;br /&gt;&lt;/h4&gt;&lt;p&gt;Mimo wykorzystywania oszacowań na podstawie liczby i stopnia skomplikowalności przypadków użycia (tak tak, robiliśmy doce!) mieliśmy już bardzo mało czasu, a przerwa wymuszona przez sesje na studiach przerwała nam prace na kolejne 2 tygodnie.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Po sesji i feriach, wreszcie udało się zorganizować repozytorium kodu  w postaci TFS, zakończyć wszystkie wymagane PoC (Proof Of Concept) i rozpocząć implementowanie! W sumie kodowanie według ustalonego harmonogramu oraz sporządzonych ekranów rozpoczęliśmy od początku marca. Prace developerski staraliśmy się prowadzić według założeń SCRUMa, organizując co dzienne spotkania (scrum meeting) późno wieczorem, które raczej kończyły się wymianą emaila, niż rozmową, jednak mimo to bardzo dobrze się sprawdzały.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Marzec osobiście wspominam jako wyjęty z życia, wszyscy wyrabialiśmy drugi etat (niektórzy po pracy). Ja osobiście zerwałem wszystkie nocki od początku marca aż do 8 kwietnia, z wyjątkiem 13.05  kiedy miałem imprezę ;) .&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HHm0WsNFjPo/ShCQiyLh1CI/AAAAAAAAIdM/Uwa7C3ZGMS0/s1600-h/IA_desktop.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://3.bp.blogspot.com/_HHm0WsNFjPo/ShCQiyLh1CI/AAAAAAAAIdM/Uwa7C3ZGMS0/s320/IA_desktop.jpg" alt="" id="BLOGGER_PHOTO_ID_5336924485694116898" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;To czym mogę pochwalić się w &lt;span&gt;&lt;span xmlns=""&gt;przy okazji&lt;/span&gt;&lt;/span&gt; developmentu, to że mieliśmy przygotowaną dobrą architekturę w postaci prostego rozwarstwienia oraz użytego patternu MVVM. Napisałem dobrą, ponieważ ten zestaw doskonale się sprawdził do naszych potrzeb. Szybka rzeźba w kodzie utrudniała by nam pracę w późniejszych etapach, a z drugiej strony rzucenie się na np. PRISM było by czymś na wyrost.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Warstwę dostępu do danych załatwiliśmy prawie w 100% poprzez LINQtoSQL, a prezentacji przy użyciu MVVM. To co mogę powiedzieć na temat tego ostatniego, to jedno wielkie POLECAM! Pomimo dodatkowego narzutu pracy, zyski w postaci separacji "logiki widoku" od samego widoku są niesamowite. Ułatwiły stworzenie testów, wprowadzanie zmian w kodzie oraz reużywalność niektórych elementów, po prostu cudo! :)&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HHm0WsNFjPo/ShCQjBybASI/AAAAAAAAIdU/3rf_W_QTN3I/s1600-h/IA_RIA.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/ShCQjBybASI/AAAAAAAAIdU/3rf_W_QTN3I/s320/IA_RIA.jpg" alt="" id="BLOGGER_PHOTO_ID_5336924489883779362" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Tak stworzona architektura oraz wcześniej zaplanowane ekrany, usystematyzowały naszą pracę i pozwoliły szacować potrzebny czas. Ten model pracy okazał się skuteczny i godny polecenia.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Działającą aplikację wraz ze screencastem oddaliśmy 8 kwietnia, czyli w dzień deadline-u. Sam screencast nagrywaliśmy 2 dni, a ostatnie zmiany w aplikacji były robione jeszcze rano ;)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ponieważ 28 kwietnia było dopiero ogłoszenie listy finalistów, wszyscy zrobiliśmy sobie przerwę. Dziewczyny z drużyny spędziły je na nadgonieniu zaległych projektów, a ja wyczekiwałem wyników.&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;Po 28 kwietnia&lt;br /&gt;&lt;/h4&gt;&lt;p&gt;Rezultat był niespodziewany, ponieważ dostaliśmy się do pierwszej dziesiątki!! Maszyna znowu ruszyła. Odgrzebaliśmy kod w którym na szczęście oprócz kliku drobiazgów nie musieliśmy za dużo zmieniać. Kod trafił na nasz wewnętrzny UAT oraz testy HCI. W miedzy czasie przygotowywaliśmy się do sesji plakatowej i ewentualnej prezentacji. Swoją drogą jest to duży minus całego konkursu że wszyscy przygotowują prezentację ale tylko połowa ma później szanse ją wygłosić. Trochę to nie w porządku że ludzie uczą się czegoś na marne.&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;12 maj - półfinały&lt;br /&gt;&lt;/h4&gt;&lt;p&gt;To już dziś, dzień sesji plakatowej. Specjalnie na tą okazję udało nam się wypożyczyć od firmy &lt;a href="http://welcome.hp.com/country/pl/pl/welcome.html#Product"&gt;Hewlett-Packard&lt;/a&gt; specjalny komputer &lt;a href="http://www.techshout.com/images/hp-touchsmart-iq-500-series-pc.jpg"&gt;HP TouchSmart IQ500&lt;/a&gt; z ekranem dotykowym za co bardzo dziękujemy!!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HHm0WsNFjPo/ShCQAdGGMbI/AAAAAAAAIc0/K5z5d-QblNo/s1600-h/DSCF0675.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/ShCQAdGGMbI/AAAAAAAAIc0/K5z5d-QblNo/s320/DSCF0675.JPG" alt="" id="BLOGGER_PHOTO_ID_5336923895918637490" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Spakowaliśmy cały sprzęt i przybyliśmy na finały. Sędziowie chodzili po stoiskach od 14:00, dlatego też wszyscy zjawili się około 12:00 żeby się przygotować. Nasze stoisko oprócz zgromadzonego sprzętu oraz kilku rekwizytów nie miało żadnych rzutników, plakatów i innych urządzeń ale mimo to chyba nie wyglądało źle :)&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HHm0WsNFjPo/ShCQATxgLFI/AAAAAAAAIc8/u8rNFtpuJxk/s1600-h/SDC10688.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_HHm0WsNFjPo/ShCQATxgLFI/AAAAAAAAIc8/u8rNFtpuJxk/s320/SDC10688.jpg" alt="" id="BLOGGER_PHOTO_ID_5336923893416340562" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Sędziowie chodzili w grupach po 2 i 3 osoby i dla każdej drużyny mieli max 30 minut na zapoznanie się z systemem. W tym czasie każda z drużyn bombardowała ich przemówieniami, pokazami, ulotkami, a nawet słodyczami :P&lt;br /&gt;&lt;/p&gt;&lt;p&gt;My osobiście wszystkich sędziów wspominamy bardzo dobrze, żaden nie powiedział nam żeby coś mu się nie spodobało, panowała pełna kultura i w żaden sposób nie przypomniało to telewizyjnych programów "IDOL" czy też "Mam Talent".&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Całość zakończyła się lekko po 19:00, kiedy to spakowaliśmy nasze rzeczy i udaliśmy się czym prędzej do domu w celu przygotowań do ewentualnej prezentacji. Tu kluczowy okazał się &lt;a href="http://dexas.pl/wp-content/uploads/2009/02/tiger_energy_drink.jpg"&gt;TIGER&lt;/a&gt; który po całym dniu wrażeń i stresu postawił nas na nogi.&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;13 maj –finały imagine cup 2009&lt;br /&gt;&lt;/h4&gt;&lt;p&gt;Ten dzień zapamiętałem jako wyjątkowo nerwowy. Rano szybko powtórzyliśmy prezentację i udaliśmy się na ogłoszenie wyników. Na miejscu było już dużo ludzi więc po cichu usiedliśmy sobie gdzieś z brzegu i czekaliśmy na wyniki.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Po krótkim wstępie wyczytano 5 finałowych drużyn: &lt;strong&gt;Demoscene Spirit, FTeamS, kAMUflage, NosoiFighters&lt;/strong&gt; oraz naszą &lt;strong&gt;RHEA&lt;/strong&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Radość była ogromna. Nie wiedzieliśmy czego się spodziewać, więc wynik był bardzo miłą niespodzianką.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Po chwili niepewności związanej z kolejnością prezentacji, udaliśmy się na dalsze przygotowania. Jak się okazało, mamy numer 4 i będziemy mieli swój pokaz od razu po przerwie kawowej. Pozostały czas przeznaczyliśmy na kolejne przygotowania.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HHm0WsNFjPo/ShCQAD18ldI/AAAAAAAAIck/jYN5TBm7T2I/s1600-h/DSC03515.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 214px;" src="http://3.bp.blogspot.com/_HHm0WsNFjPo/ShCQAD18ldI/AAAAAAAAIck/jYN5TBm7T2I/s320/DSC03515.JPG" alt="" id="BLOGGER_PHOTO_ID_5336923889140012498" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Wybiła 12:45, czyli czas występu. Oczywiście jak na złość Internet nie działał, ale mieliśmy plan B na takie okoliczności w postaci komórki :] Kiedy wszyscy goście wrócili z przerwy, rozpoczęliśmy. Pomimo tremy i małej wpadki w tekście, prezentacja przebiegła raczej pomyślnie (czekamy na nagranie z &lt;a href="http://www.iwp.com.pl/"&gt;IPW&lt;/a&gt;). Po prezentacji było forum przedsiębiorczości, a myśmy udali się na mały obiadek.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HHm0WsNFjPo/ShCQi-ioihI/AAAAAAAAIdE/iQEmx8JZZBE/s1600-h/Imagine_Cup_finaly.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_HHm0WsNFjPo/ShCQi-ioihI/AAAAAAAAIdE/iQEmx8JZZBE/s320/Imagine_Cup_finaly.jpg" alt="" id="BLOGGER_PHOTO_ID_5336924489012251154" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Wyniki! Wyniki były ogłaszane powoli, co dodatkowo zwiększyło stres. No i stało się, zostaliśmy wyczytani jako drużyna która zajmie 4 miejsce razem z drużyną FTeams. Trzecie miejsce zajęła drużyna NosoiFighters, drugie Kamuflage, a pierwsze DemoScene. Jak to mówią "Winner Take All" i także tym razem tak było, jednak mimo to nie zabrało nam to radości  z tego co udało nam się dokonać do tej pory. Dostarczone aplikację były na bardzo wysokim poziomie i mam nadzieję że DemoScene w tym roku sięgnie także pierwszego miejsca w Egipcie! Był by to bardzo miły akcent przed przyszłorocznymi światowymi finałami ImagineCup 2010 które mają odbyć się właśnie w Polsce.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HHm0WsNFjPo/ShCQADf11xI/AAAAAAAAIcs/UuLctih2IIM/s1600-h/DSC03538.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 214px;" src="http://4.bp.blogspot.com/_HHm0WsNFjPo/ShCQADf11xI/AAAAAAAAIcs/UuLctih2IIM/s320/DSC03538.JPG" alt="" id="BLOGGER_PHOTO_ID_5336923889047295762" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Wieczorem Microsoft ugościł wszystkich miłą imprezką integracyjną na której to rzeczywiście poznałem mnóstwo ludzi oraz miałem okazję porozmawiać z tymi których widuje na co dzień na forach codeguru itp.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Podsumowanie&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Podsumowując, cieszę się że wziąłem udział w tym konkursie. Może i nie zajęliśmy miejsca na podium ale tworząc nasz system, w bardzo krótkim czasie przerobiliśmy tyle technologii i nauczyliśmy się tak wiele, że zdobyta wiedza jest bezcenna, a korzyści z jej płynące będą długotrwałe. Sam bardzo chciałem zrobić coś większego w WPF, tutaj miałem doskonałą motywację i się udało. Oprócz tego, używaliśmy między innymi: Silverlight 3.0 Beta 1, PEX, MVVM, LINQtoSQL, MS SQL Server, TFS, Windows Mobile, WCF, Silverlight Virtual Earth Map Control, Mashup, czytniki linii papilarnych itd., wszystkie te i nie tylko technologie otrzymaliśmy w skondensowanej dawce w ciągu kilku miesięcy i mogę się założyć że gdyby nie ImagineCup, zapewne nie sięgnęlibyśmy po nie jeszcze długo (no może oprócz Silverlight 3 :P ).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Chciałem także tak na samym końcu pogratulować organizatorom ImaineCup 2009. To nie był mój pierwszy konkurs w którym brałem udział, ale na pewno był to konkurs najlepiej zorganizowany. Zarówna cała impreza jak i wsparcie było bardzo dobrze przemyślane. Organizatorzy, tu szczególnie należy wymienić Piotra Kramka, odpowiadali na każde zapytanie, bardzo często wieczorami i w weekendy, w godzinach w których powinni mieć wolne, oni czuwali aby każdy był poinformowany i każdy wiedział co się dzieje. Liczne spotkania, livemeeting-i oraz emaile usprawniły cały proces, za co należy się duże podziękowanie organizatorom!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Wybrane linki o ImagineCup&lt;br /&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a target="_blank" href="http://www.wi.pb.edu.pl/pl/aktualnoci/272-finay-krajowe-imagine-cup-2009"&gt;http://www.wi.pb.edu.pl/pl/aktualnoci/272-finay-krajowe-imagine-cup-2009&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a target="_blank" href="http://nt.interia.pl/raport/imaginecup-2009/imagine-cup-2009/news/polscy-mistrzowie-imagine-cup-2009,1306379,,2"&gt;http://nt.interia.pl/raport/imaginecup-2009/imagine-cup-2009/news/polscy-mistrzowie-imagine-cup-2009,1306379,,2&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a target="_blank" href="http://wss.pl/NewsList/1,10863.aspx"&gt;http://wss.pl/NewsList/1,10863.aspx&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a target="_blank" href="http://iwp.com.pl/pressroom/Final-polskiej-edycji-konkursu-Microsoft-Imagine-Cup-2009/1"&gt;http://iwp.com.pl/pressroom/Final-polskiej-edycji-konkursu-Microsoft-Imagine-Cup-2009/1&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Pozdrawiam,&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Jacek Ciereszko&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-4640100417973230855?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/4640100417973230855/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=4640100417973230855' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/4640100417973230855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/4640100417973230855'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2009/05/imagine-cup-2009-recenzja-oczami.html' title='Imagine Cup 2009 – relacja uczestnika'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_HHm0WsNFjPo/ShCP_w624ZI/AAAAAAAAIcc/OrNt6JxSrA0/s72-c/DSCF0701.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6059274208340478729.post-3017453034642422345</id><published>2009-04-26T22:42:00.005+02:00</published><updated>2009-04-26T23:49:04.632+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='codeplex'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight 3'/><category scheme='http://www.blogger.com/atom/ns#' term='Controls'/><category scheme='http://www.blogger.com/atom/ns#' term='count down control'/><title type='text'>Silverlight Count Down Control – Wasze dni są policzone</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;Jakiś czas temu wymyśliłem sobie malutki programik który będzie odliczał ustawiony czas. Ktoś by zapytał: po co to komu? Jednak jak się dobrze zastanowić, to taki "counter" czasu może być bardzo fajnym dodatkiem do wielu stron. Na pewno fajnie przypomni o nadchodzącej konferencji czy też spotkaniu, chociaż jestem przekonany że znajdzie się dla niego wiele innych ciekawych zastosowań :)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Wychodząc naprzeciw oczekiwaniom stworzyłem taki programik i umieściłem wraz z kodem źródłowym na codeplex-sie pod adresem: &lt;a href="http://silverlightgadgets.codeplex.com/"&gt;http://silverlightgadgets.codeplex.com/&lt;/a&gt; (mam nadzieję że uda mi się tam także umieścić wiele innych "gadgetów")&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Demo&lt;/strong&gt; znajdziecie pod adresem (tak wiem, grafika wygląda tragicznie ;)):&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://wpierdalaj.pl/SWG/SilverlightCountDown/Run/SilverlightCountDownTimerExampleTestPage.html"&gt;http://wpierdalaj.pl/SWG/SilverlightCountDown/Run/SilverlightCountDownTimerExampleTestPage.html&lt;/a&gt;&lt;br /&gt;  &lt;/p&gt;&lt;h2&gt;Jak go użyć&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Counter został stworzony tak aby był łatwo konfigurowalny i zgodny z wymaganiami wzorca Model-View-ViewModel  (MVVM). Najłatwiej jest zwyczajnie:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Pobrać bibliotekę kontrolki (SilverlightCountDownTimer.dll) ze strony &lt;a href="http://silverlightgadgets.codeplex.com/"&gt;http://silverlightgadgets.codeplex.com/&lt;/a&gt;,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Dołączyć ją do rozwijanego projektu (Add References),&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Umieścić w kodzie:&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;pre class="prettyprint"&gt;&amp;lt;UserControl x:Class="SilverlightCountDownTimerExample.MainPage"&lt;br /&gt;  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt;  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt;  xmlns:timeCounter="clr-namespace:SilverlightTimer assembly=SilverlightCountDownTimer"        &lt;br /&gt;  Width="200" Height="100"&amp;gt;&lt;br /&gt;  &amp;lt;Grid x:Name="LayoutRoot" Background="Transparent"&amp;gt;&lt;br /&gt;      &amp;lt;timeCounter:SilverlightTimerControl EventDescription="Time to New Year Party"&lt;br /&gt;      EventTime="2010-01-01 00:00" /&amp;gt;&lt;br /&gt;  &amp;lt;/Grid&amp;gt;&lt;br /&gt;&amp;lt;/UserControl&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Tak jak widzimy w przykładzie, wystarczy wstawić kontrolkę i ustawić podstawowe parametry aby odliczanie ruszyło.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Parametry&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Do dyspozycji mamy następujące parametry konfiguracji kontrolki:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;EventDescription &lt;/span&gt;– Tekst który wyświetli się pod odliczanym czasem. W tej wersji istnieje ograniczenie długości pola tekstowego jakie może pomieścić textbox.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;EventTime &lt;/span&gt;– Data do której będzie odliczany czas.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;EventTimeUrl &lt;/span&gt;– Adres pliku tekstowego który zawiera datę. Ten parametr umożliwia dynamiczne modyfikowanie daty bez ingerencji w kod aplikacji. Wystarczy że zmienimy datę w pliku, a counter zacznie odliczać czas do nowej daty. Przykładowy plik z datą: &lt;a href="http://wpierdalaj.pl/SWG/date.txt"&gt;http://wpierdalaj.pl/SWG/date.txt&lt;/a&gt;. &lt;em&gt;Uwaga, jeśli ustawimy także parametr "EventTime", "EventTimeUrl" zostanie pominięty. Parametr"EventTime" ma pierwszeństwo przed "EventTimeUrl".&lt;/em&gt; Należy także zwrócić uwagę czy plik z datą jest dostępny dla odwołań z zewnątrz (patrz ustawienia &lt;span id="ctl00_ctl00_MasterContent_Content_wikiSourceLabel"&gt;Client Access Policy &lt;span style="text-decoration: underline;"&gt;na blogu &lt;/span&gt;&lt;a href="http://timheuer.com/blog/archive/0001/01/01/silverlight-cross-domain-policy-file-snippet-intellisense.aspx" class="externalLink"&gt;Tim Heuera&lt;/a&gt;)&lt;/span&gt;    &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;CounterFinish &lt;/span&gt;– Event który zostanie wywołany gdy counter skończy odliczanie. W ten sposób możemy zainicjalizować jakąś akcję w aplikacji gdy upłynie ustawion czas.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;EventTimeCache &lt;/span&gt;– Ten parametr uruchamia funkcję cache'owania daty. Ma to zapobiec sytuacji nadmiernego odpytywania serwera (poprzez parametr EventTimeUrl) o datę do odliczania. Odpytanie jest mało kosztowne, a sama data to kilka bajtów, ale jeśli można odciążyć serwer, to warto skorzystać z tej możliwości. Domyślnie cache jest wyłączony, a jego czas ważności ustawiony na jeden dzień, po tym terminie counter sprawdzi czy ma aktualne dane.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;EventTimeCacheDuration &lt;/span&gt;– Ta opcja zmienia domyślny czas cachowania daty. Jednostką jest dzień, a więc ustawienie tego parametru na wartość 40, sprawi że aplikacja przez 40 dni nie będzie aktualizować  odliczanej daty.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Wszystkie wyżej wymienione parametry możemy także ustawiać bezpośrednio w kodzie i zmieniać w czasie działania kontrolki. &lt;/strong&gt;Np.:&lt;strong&gt;&lt;br /&gt;   &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;.&lt;strong&gt;XAML&lt;/strong&gt;:&lt;br /&gt;&lt;/p&gt;&lt;pre class="prettyprint"&gt;&amp;lt;timeCounter:SilverlightTimerControl x:Name="myCounter" /&amp;gt;&lt;/pre&gt;&lt;p&gt;.&lt;strong&gt;CS&lt;/strong&gt; (C#):&lt;/p&gt;&lt;pre class="prettyprint"&gt;myCounter.EventTime = new DateTime(1983, 12, 14, 0, 0, 0);&lt;br /&gt;myCounter.EventDescription = "Moje Urodziny";&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Ponieważ aplikacja wspiera pattern Model-View-ViewModel (MVVM), możliwe jest także ustawienie binding-u na w/w paramentry. Np.:&lt;br /&gt;&lt;/p&gt;&lt;pre class="prettyprint"&gt;&amp;lt;timeCounter:SilverlightTimerControl x:Name="myCounter" EventTime="{Binding Path=EventTime}" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;h2&gt;Podłączenie aplikacji bez dotykania kodu i Visual Studio&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Dla tych którzy nie mają ochoty na zabawę z Visual Studio, dostępna jest także opcja gotowej aplikacji konfigurowanej z poziomu kodu html. W pliku "HtmlVersion" znajduje się kompletny przykład takiej konfiguracji, a poniżej wycinek z pliku &lt;strong&gt;SilverlightCountDownTimerExampleTestPage.html&lt;/strong&gt;:&lt;br /&gt;&lt;/p&gt;&lt;pre class="prettyprint"&gt;&amp;lt;object data="data:application/x-silverlight-2,"&lt;br /&gt;type="application/x-silverlight-2" width="100%" height="100%"&amp;gt;&lt;br /&gt;   &amp;lt;param name="source" value="ClientBin/SilverlightCountDownTimerExample.xap"/&amp;gt; &lt;br /&gt;   &amp;lt;param name="onerror" value="onSilverlightError" /&amp;gt;&lt;br /&gt;   &amp;lt;param name="background" value="white" /&amp;gt;&lt;br /&gt;   &amp;lt;param name="minRuntimeVersion" value="3.0.40307.0" /&amp;gt;&lt;br /&gt;   &amp;lt;param name="autoUpgrade" value="true" /&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;!--// EventTimeUrl will be ignored because EventTime is set--&amp;gt;&lt;br /&gt;   &amp;lt;param name="initParams"&lt;br /&gt;    value="EventDescription=Time to MIX 2010,&lt;br /&gt;    EventTime=2010-03-15 08:00,&lt;br /&gt;    EventTimeUrl=http://wpierdalaj.pl/SWG/date.txt,&lt;br /&gt;    EventTimeCache=True,&lt;br /&gt;    EventTimeCacheDuration=40"&lt;br /&gt;   /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/object&amp;gt;&lt;/pre&gt;&lt;p&gt;Aby uruchomić counter, nie musimy ustawiać wszystkich w/w parametrów. Jeśli coś nie działa, sprawdźcie czy nie zrobiliście błędu w zapisie. Niestety opcja "initParams" jest bardzo czuła na dodatkowe znaki oraz nie pozwala na znaki specjalne, np. cudzysłowy czy przecinki w ustawianych wartościach.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Dodatki&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Jeśli chcemy aby counter był klikalny i np. przekierował osobę na inną stronę, wystarczy otoczyć go prostym Hiperlinkiem w kodzie XAML:&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre class="prettyprint"&gt;&amp;lt;HyperlinkButton NavigateUri="http://jacekciereszko.pl" TargetName="_blank" &amp;gt;&lt;br /&gt;     &amp;lt;timeCounter:SilverlightTimerControl x:Name="myControl" /&amp;gt;&lt;br /&gt;&amp;lt;/HyperlinkButton&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;h2&gt;Wygląd&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Na ten moment nie przewiduje dla "countera" skinsów ani wsparcia na zmianę grafiki. Powodem tego jest brak jakichkolwiek umiejętności graficznych, w związku z tym zakładam że każdy będzie sam w stanie korzystając z kodu źródłowego dostosować wygląd aplikacji do swoich potrzeb.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Jeśli znajdzie się ktoś kto chciałbym coś ładnego namalować i się tym podzielić, chętnie dodam to do projektu.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Podsumowanie&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Proszę piszcie jeśli macie jakieś propozycje lub zastrzeżenia, będę starał się ulepszać na bierząco "odliczacza" czasu :) Na razie planowany jest downgrade do wersji Silverlight 2.0.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Strona projektu: &lt;a href="http://silverlightgadgets.codeplex.com/"&gt;http://silverlightgadgets.codeplex.com/&lt;/a&gt;&lt;br /&gt;  &lt;/p&gt;&lt;p&gt;Pozdrawiam,&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Jacek Ciereszko&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6059274208340478729-3017453034642422345?l=jacekciereszko.pl' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jacekciereszko.pl/feeds/3017453034642422345/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6059274208340478729&amp;postID=3017453034642422345' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/3017453034642422345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6059274208340478729/posts/default/3017453034642422345'/><link rel='alternate' type='text/html' href='http://jacekciereszko.pl/2009/04/silverlight-count-down-control-wasze.html' title='Silverlight Count Down Control – Wasze dni są policzone'/><author><name>Jacek Ciereszko</name><uri>http://www.blogger.com/profile/13889932709491890964</uri><email>dzak83@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14990219364131253490'/></author><thr:total>2</thr:total></entry></feed>