<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.microsoft.co.il/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>MS Israel Community</title><link>http://blogs.microsoft.co.il/blogs/</link><description>Building a community
</description><dc:language>en-US</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Closing Another Year</title><link>http://blogs.microsoft.co.il/blogs/gilf/archive/2010/02/09/closing-another-year.aspx</link><pubDate>Tue, 09 Feb 2010 11:11:59 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515613</guid><dc:creator>Gil Fink</dc:creator><slash:comments>0</slash:comments><description>&lt;h1&gt;&lt;strong&gt;Closing Another Year&lt;/strong&gt;&lt;/h1&gt;  &lt;p&gt;Another year of writing is&lt;a href="http://blogs.microsoft.co.il/blogs/gilf/HappyBirthday_7A55D14C.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;margin-left:0px;border-top:0px;margin-right:0px;border-right:0px;" title="My Blog is Two Years Old" border="0" alt="My Blog is Two Years Old" align="right" src="http://blogs.microsoft.co.il/blogs/gilf/HappyBirthday_thumb_69712D5C.jpg" width="114" height="119" /&gt;&lt;/a&gt;     &lt;br /&gt;over. A lot has happened in     &lt;br /&gt;my life during the last year.    &lt;br /&gt; Here are some highlights:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;I have a new &lt;a title="Father For The Second Time" href="http://blogs.microsoft.co.il/blogs/gilf/archive/2009/12/28/father-for-the-second-time.aspx"&gt;&lt;strong&gt;baby boy&lt;/strong&gt;&lt;/a&gt;      &lt;br /&gt;at home :-)&lt;/li&gt;    &lt;li&gt;I received a &lt;a title="Microsoft MVP Award" href="http://blogs.microsoft.co.il/blogs/gilf/archive/2009/10/01/microsoft-mvp-award.aspx"&gt;&lt;strong&gt;MVP award&lt;/strong&gt;&lt;/a&gt; from      &lt;br /&gt;Microsoft.&lt;/li&gt;    &lt;li&gt;I started to work in a new&amp;#160; &lt;br /&gt;company – &lt;a title="Sela Group Site" href="http://www.sela.co.il/"&gt;&lt;strong&gt;Sela Group&lt;/strong&gt;&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;And many more.&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;&lt;strong&gt;Few Stats About my Blog&lt;/strong&gt;&lt;/h3&gt;  &lt;li&gt;Subscribed readers by &lt;a href="http://www.feedburner.com/fb/a/home"&gt;&lt;strong&gt;Feedburner&lt;/strong&gt;&lt;/a&gt;: ~350 (first year – ~115). &lt;/li&gt;  &lt;li&gt;Total blog posts: 219 (first year – 113). &lt;/li&gt;  &lt;li&gt;Total comments: 421 (first year – 216). &lt;/li&gt;  &lt;li&gt;Total trackbacks and pingbacks: 368 (first year – 81). &lt;/li&gt;  &lt;li&gt;Google Analytics summary of last year:    &lt;ul&gt;     &lt;li&gt;Page Views: 178,589 (first year – 57,539). &lt;/li&gt;      &lt;li&gt;Unique Pageviews: 154,821 (first year – 49,714). &lt;/li&gt;      &lt;li&gt;Average time on site: 03:12 (first year – 02:42). &lt;/li&gt;   &lt;/ul&gt; &lt;/li&gt;  &lt;h3&gt;&lt;strong&gt;Top Three Posts Ordered by Number of Views&lt;/strong&gt;&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="Extending ASP.NET MVC HtmlHelper Class" href="http://blogs.microsoft.co.il/blogs/gilf/archive/2009/01/13/extending-asp-net-mvc-htmlhelper-class.aspx"&gt;&lt;strong&gt;Extending ASP.NET MVC HtmlHelper Class&lt;/strong&gt;&lt;/a&gt; – 13013&lt;/li&gt;    &lt;li&gt;&lt;a title="Mapping Stored Procedure Results to a Custom Entity in Entity Framework" href="http://blogs.microsoft.co.il/blogs/gilf/archive/2009/03/13/mapping-stored-procedure-results-to-a-custom-entity-in-entity-framework.aspx"&gt;&lt;strong&gt;Mapping Stored Procedure Results to a Custom          &lt;br /&gt;Entity in Entity Framework&lt;/strong&gt;&lt;/a&gt; - 7099&lt;/li&gt;    &lt;li&gt;&lt;a title="Populating a ModalPopupExtender Dynamically" href="http://blogs.microsoft.co.il/blogs/gilf/archive/2009/08/14/populating-a-modalpopupextender-dynamically.aspx"&gt;&lt;strong&gt;Populating a ModalPopupExtender Dynamically&lt;/strong&gt;&lt;/a&gt; - 6972&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;&lt;strong&gt;Tell me how can I Improve My Blog&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;I’d like to hear from you, the readers of my blog, how can I improve it.    &lt;br /&gt;feel free to leave comments such as which topics would you like me to     &lt;br /&gt;write about? which things add value to you when you read my blog? or every     &lt;br /&gt;comment that you want to share with me in regard to my blog. &lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:left;margin:0px;padding:4px 4px 4px 4px;"&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://blogs.microsoft.co.il/blogs/gilf/archive/2010/02/09/closing-another-year.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://blogs.microsoft.co.il/blogs/gilf/archive/2010/02/09/closing-another-year.aspx&amp;amp;bgcolor=0080C0&amp;amp;fgcolor=FFFFFF&amp;amp;border=000000&amp;amp;cbgcolor=D4E1ED&amp;amp;cfgcolor=000000" alt="DotNetKicks Image" border="0/" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515613" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/gilf/archive/tags/Personal/default.aspx">Personal</category><category domain="http://blogs.microsoft.co.il/blogs/gilf/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category></item><item><title>SharePoint 2010 Overview &amp; Introduction to SharePoint 2010 Service Architecture – Session Slides</title><link>http://blogs.microsoft.co.il/blogs/adir_ron/archive/2010/02/09/sharepoint-2010-overview-amp-introduction-to-sharepoint-2010-service-architecture-session-slides.aspx</link><pubDate>Tue, 09 Feb 2010 09:28:48 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515582</guid><dc:creator>Adir Ron</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Hey,
&lt;/p&gt;&lt;p&gt;First of all, many thanx to those of you who attended my SharePoint 2010 sessions in Microsoft. This was the first session we&amp;#39;ve made publicly available to customers and it really kicked off the launch of SharePoint 2010 events scheduled all through the coming months. Hope you all got a glimpse of the SharePoint capabilities and I promise further drill down on the large topics in future events.
&lt;/p&gt;&lt;p&gt;Attached here are the slides for both of my presentations. The Overview session mainly discussed the Information Worker features and was aimed for the end users. The SharePoint 2010 Service Architecture session was designed to introduce some of the new &amp;amp; improved extricating services in this release for the IT &amp;amp; Developer such as Search, BI, Business Connectivity and more.
&lt;/p&gt;&lt;p&gt;SharePoint 2010 Overview slides:
&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/515584/download.aspx"&gt;http://blogs.microsoft.co.il/files/folders/515584/download.aspx&lt;/a&gt;
	&lt;/p&gt;&lt;p&gt;Introduction to SharePoint 2010 Service Architecture slides:
&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/515588/download.aspx"&gt;http://blogs.microsoft.co.il/files/folders/515588/download.aspx&lt;/a&gt;
	&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;I&amp;#39;ll be more than happy to hear your thoughts and requests for the future. Please comment by mail for fast response: &lt;a href="mailto:adir@advantech.co.il"&gt;adir@advantech.co.il&lt;/a&gt;
	&lt;/p&gt;&lt;p&gt;Have a nice day,
&lt;/p&gt;&lt;p&gt;Adir Ron&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515582" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/adir_ron/archive/tags/SharePoint+2010/default.aspx">SharePoint 2010</category><category domain="http://blogs.microsoft.co.il/blogs/adir_ron/archive/tags/Service+Architecture/default.aspx">Service Architecture</category></item><item><title>Windows Mobile 7 – Good or Bad ?</title><link>http://blogs.microsoft.co.il/blogs/noams/archive/2010/02/09/windows-mobile-7-good-or-bad.aspx</link><pubDate>Tue, 09 Feb 2010 09:27:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515581</guid><dc:creator>Noam</dc:creator><slash:comments>0</slash:comments><description>This post is based on the on going buzz in the net about the capabilities of Windows Mobile 7 due this year 1. First nothing is official, wait for next Monday (Feb 15th) for the official announcement. 2. Multitasking – Still exist but this time no one can create a busy wait loop and kill the device battery in 30min (happened to me couple of times with some applications), Making software more stable and better suitable for mobile device is good at my book. 3. Flash – Why I need to ask ? first of all...(&lt;a href="http://blogs.microsoft.co.il/blogs/noams/archive/2010/02/09/windows-mobile-7-good-or-bad.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515581" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/noams/archive/tags/Gadgets/default.aspx">Gadgets</category><category domain="http://blogs.microsoft.co.il/blogs/noams/archive/tags/Technology/default.aspx">Technology</category><category domain="http://blogs.microsoft.co.il/blogs/noams/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category><category domain="http://blogs.microsoft.co.il/blogs/noams/archive/tags/Mobile/default.aspx">Mobile</category><category domain="http://blogs.microsoft.co.il/blogs/noams/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/noams/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/noams/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/noams/archive/tags/embedded/default.aspx">embedded</category></item><item><title>Disposable Property</title><link>http://blogs.microsoft.co.il/blogs/shlomo/archive/2010/02/09/disposable-property.aspx</link><pubDate>Tue, 09 Feb 2010 07:16:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515579</guid><dc:creator>Shlomo</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div dir="rtl" align="right"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/archive/2009/11/05/open-command-window-here.aspx"&gt;עדי&lt;/a&gt; הראה לי רעיון מאוד מעניין למימוש שמירת אובייקט זמני בזיכרון. למה הכוונה ?&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;נניח שיש לנו קוד כזה &lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;div style="FONT-FAMILY:Courier New;BACKGROUND:white;COLOR:black;FONT-SIZE:10pt;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;class&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;FileLogger&lt;/span&gt; : &lt;span style="COLOR:#2b91af;"&gt;ILogger&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;class&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;MockLogger&lt;/span&gt; : &lt;span style="COLOR:#2b91af;"&gt;ILogger&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;class&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Person&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;ILogger&lt;/span&gt; Logger { &lt;span style="COLOR:blue;"&gt;get&lt;/span&gt;; &lt;span style="COLOR:blue;"&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;ויש לנו את פונקצייה שמקבלת כפרמטר Person אבל בחלק מהקוד של הפונקצייה לא רוצים שה - Logger יהיה FileLogger אלא MokeLogger - מן הסתם נעשה קוד כזה&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;div style="FONT-FAMILY:Courier New;BACKGROUND:white;COLOR:black;FONT-SIZE:10pt;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;void&lt;/span&gt; Func(&lt;span style="COLOR:#2b91af;"&gt;Person&lt;/span&gt; person)&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#2b91af;"&gt;ILogger&lt;/span&gt; original = person.Logger;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; person.Logger = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;MockLogger&lt;/span&gt;();&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//work.....&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; person.Logger = original;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;מה שעדי הציע - זה לעשות את הקוד הבא&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;div style="FONT-FAMILY:Courier New;BACKGROUND:white;COLOR:black;FONT-SIZE:10pt;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;using&lt;/span&gt; (&lt;span style="COLOR:#2b91af;"&gt;DisposableProperty&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;ILogger&lt;/span&gt;&amp;gt;.Set(person, &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;MockLogger&lt;/span&gt;()))&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;// work..&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;וכעת באורח פלא בתוך בלוג ה - using ה - Logger יהיה Mock וכשנצא מהבלוק זה יחזור להיות ה - Logger המקורי.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;הרעיון הזה הוא נהדר בסביבות Test - תחשבו על מקרים שאתם לא באמת מעוניינים לגשת לבסיס הנתונים למשל וכו&amp;#39;, נכון שתמיד אפשר לכתוב כמו בדוגמא הראשונה אבל הקוד הרבה יותר אלגנטי בצורה הזאת.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;אז איך זה עובד ?&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;div style="FONT-FAMILY:Courier New;BACKGROUND:white;COLOR:black;FONT-SIZE:10pt;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;class&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;DisposableProperty&lt;/span&gt;&amp;lt;T&amp;gt; : &lt;span style="COLOR:#2b91af;"&gt;IDisposable&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;where&lt;/span&gt; T : &lt;span style="COLOR:blue;"&gt;class&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;private&lt;/span&gt; T _original;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;PropertyInfo&lt;/span&gt; _property;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;private&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;object&lt;/span&gt; _obj;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;&lt;span style="COLOR:blue;"&gt;private&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;/span&gt;DisposableProperty(&lt;span style="COLOR:blue;"&gt;object&lt;/span&gt; obj, T replaceValue)&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (obj == &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;) &lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;throw&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;ArgumentNullException&lt;/span&gt;();&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;._obj = obj;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _property = obj.GetType().GetProperties().&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FirstOrDefault(p =&amp;gt; p.PropertyType == &lt;span style="COLOR:blue;"&gt;typeof&lt;/span&gt;(T));&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (_property == &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;) &lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;throw&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;ArgumentException&lt;/span&gt;();&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _original = _property.GetValue(obj, &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;) &lt;span style="COLOR:blue;"&gt;as&lt;/span&gt; T;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _property.SetValue(obj, replaceValue, &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;void&lt;/span&gt; Dispose()&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _property.SetValue(_obj, _original, &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;static&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;IDisposable&lt;/span&gt; Set(&lt;span style="COLOR:blue;"&gt;object&lt;/span&gt; obj, T replaceValue) &lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;DisposableProperty&lt;/span&gt;&amp;lt;T&amp;gt;(obj, replaceValue);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;אמנם לא הכי יעיל מבחינת ביצועים - אבל בדרך כלל קוד כזה ירוץ בסביבות Tests אז לא כל כך נורא.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;המתודה Set מחזירה מופע חדש של המחלקה, בבנאי שומרים את המקורי וב - Dispose מחזירים את המקורי.&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515579" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/reflection/default.aspx">reflection</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/_E705D505D305_+_E005DB05D505DF05_/default.aspx">קוד נכון</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/UnitTest/default.aspx">UnitTest</category></item><item><title>does MEF apply the SOA paradigm?</title><link>http://blogs.microsoft.co.il/blogs/bnaya/archive/2010/02/09/does-mef-apply-the-soa-paradigm.aspx</link><pubDate>Tue, 09 Feb 2010 07:02:21 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515555</guid><dc:creator>bnaya</dc:creator><slash:comments>0</slash:comments><description>&lt;h3&gt;does &lt;strong&gt;MEF&lt;/strong&gt; apply the &lt;strong&gt;SOA&lt;/strong&gt; paradigm?&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;in this post I&amp;#39;m going to argue that the &lt;strong&gt;Manage Extensibility Framework&lt;/strong&gt; (&lt;a href="http://mef.codeplex.com/" target="_blank"&gt;&lt;strong&gt;MEF&lt;/strong&gt;&lt;/a&gt;),&lt;/p&gt;  &lt;p&gt;is actually applying to the &lt;a href="http://www.bpminstitute.org/articles/article/article/the-four-tenets-of-service-orientation.html" target="_blank"&gt;&lt;strong&gt;4 tenet&lt;/strong&gt;&lt;/a&gt; of &lt;strong&gt;Service Orientation Architecture&lt;/strong&gt; (&lt;a href="http://en.wikipedia.org/wiki/Service-oriented_architecture" target="_blank"&gt;&lt;strong&gt;SOA&lt;/strong&gt;&lt;/a&gt;),&lt;/p&gt;  &lt;p&gt;therefore &lt;strong&gt;MEF&lt;/strong&gt; is actually,&lt;strong&gt; in-process&lt;/strong&gt; implementation of the &lt;strong&gt;SOA&lt;/strong&gt; paradigm.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h5&gt;Background&lt;/h5&gt;  &lt;p&gt;when we speaking about &lt;strong&gt;SOA&lt;/strong&gt; we used to think about technologies like &lt;strong&gt;web services&lt;/strong&gt; and &lt;strong&gt;WCF&lt;/strong&gt;,&lt;/p&gt;  &lt;p&gt;which is cross process technologies. &lt;/p&gt;  &lt;p&gt;but does SOA define that services should always be consumed from the clouds?&lt;/p&gt;  &lt;p&gt;local services like loggers, rule engine, cache and more are everyday practice for in-process services.&lt;/p&gt;  &lt;h5&gt;&amp;#160;&lt;/h5&gt;  &lt;h5&gt;What make your architecture, service oriented?&lt;/h5&gt;  &lt;p&gt;different architect having different opinions of how to construct &lt;strong&gt;SOA&lt;/strong&gt; architecture,&lt;/p&gt;  &lt;p&gt;but most of them agree that &lt;strong&gt;SOA&lt;/strong&gt; design should apply to the &lt;strong&gt;&lt;a href="http://www.bpminstitute.org/articles/article/article/the-four-tenets-of-service-orientation.html" target="_blank"&gt;4 tenets of SOA&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;h5&gt;The 4 tenets of SOA&lt;/h5&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/1264400738_password_1546BD62.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="MEF, Catalog, Extensibility, Import,Export" border="0" alt="MEF, Catalog, Extensibility, Import,Export" src="http://blogs.microsoft.co.il/blogs/bnaya/1264400738_password_thumb_02CE46E0.jpg" width="59" height="59" /&gt;&lt;/a&gt; Service should have &lt;strong&gt;Explicit Boundaries&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/1264406391_Gear_59E331D6.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="1264406391_Gear" border="0" alt="1264406391_Gear" src="http://blogs.microsoft.co.il/blogs/bnaya/1264406391_Gear_thumb_6A2E83C2.jpg" width="59" height="59" /&gt;&lt;/a&gt;&amp;#160; Service should be &lt;strong&gt;Autonomous&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/1264403639__bedingungen_7AC67EB0.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="1264403639__bedingungen" border="0" alt="1264403639__bedingungen" src="http://blogs.microsoft.co.il/blogs/bnaya/1264403639__bedingungen_thumb_58FAA61F.jpg" width="61" height="61" /&gt;&lt;/a&gt; Service API should rely on &lt;strong&gt;Contract&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/1264404491_diagram_v226_6588533B.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="1264404491_diagram_v2-26" border="0" alt="1264404491_diagram_v2-26" src="http://blogs.microsoft.co.il/blogs/bnaya/1264404491_diagram_v226_thumb_0B11D09D.jpg" width="58" height="58" /&gt;&lt;/a&gt; Service behavior and compatibility should rely on &lt;strong&gt;Policy&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h5&gt;How &lt;strong&gt;MEF&lt;/strong&gt; apply to the 4 tenets?&lt;/h5&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/1264400738_password_1546BD62.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="MEF, Catalog, Extensibility, Import,Export" border="0" alt="MEF, Catalog, Extensibility, Import,Export" src="http://blogs.microsoft.co.il/blogs/bnaya/1264400738_password_thumb_02CE46E0.jpg" width="59" height="59" /&gt;&lt;/a&gt; &lt;strong&gt;MEF&lt;/strong&gt; &lt;strong&gt;boundaries&lt;/strong&gt; define explicitly by the &lt;strong&gt;Export&lt;/strong&gt; definition.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/1264406391_Gear_59E331D6.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="1264406391_Gear" border="0" alt="1264406391_Gear" src="http://blogs.microsoft.co.il/blogs/bnaya/1264406391_Gear_thumb_6A2E83C2.jpg" width="59" height="59" /&gt;&lt;/a&gt;&amp;#160; separating &lt;strong&gt;exports&lt;/strong&gt; into separate dlls will create &lt;strong&gt;autonomous&lt;/strong&gt; unit which has no need &lt;/p&gt;  &lt;p&gt;for any reference but the reference for the services contract.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/1264403639__bedingungen_7AC67EB0.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="1264403639__bedingungen" border="0" alt="1264403639__bedingungen" src="http://blogs.microsoft.co.il/blogs/bnaya/1264403639__bedingungen_thumb_58FAA61F.jpg" width="61" height="61" /&gt;&lt;/a&gt;&amp;#160;&lt;strong&gt;Imports&lt;/strong&gt; does not aware of the actual implementation, &lt;strong&gt;imports&lt;/strong&gt; are solely relay on the &lt;strong&gt;contract&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;(&lt;font color="#404040"&gt;&lt;strong&gt;composition&lt;/strong&gt; will find &lt;strong&gt;export&lt;/strong&gt; that mach the &lt;strong&gt;import&lt;/strong&gt; contract&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/1264404491_diagram_v226_6588533B.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="1264404491_diagram_v2-26" border="0" alt="1264404491_diagram_v2-26" src="http://blogs.microsoft.co.il/blogs/bnaya/1264404491_diagram_v226_thumb_0B11D09D.jpg" width="58" height="58" /&gt;&lt;/a&gt;&amp;#160;&lt;strong&gt;MEF&lt;/strong&gt; has different &lt;strong&gt;policies&lt;/strong&gt; mechanism like &lt;strong&gt;metadata&lt;/strong&gt;, &lt;strong&gt;creation&lt;/strong&gt; policy, &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;instantiation&lt;/strong&gt; policy, &lt;strong&gt;recomposition&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h5&gt;Summary&lt;/h5&gt;  &lt;p&gt;despite &lt;strong&gt;MEF&lt;/strong&gt; being an in-process technology it does apply to the 4 tenet of SOA,&lt;/p&gt;  &lt;p&gt;therefore it can consider as such.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d74fd9aa-ba9a-42e9-98da-e786f7c3beb6" class="wlWriterSmartContent"&gt;תגים של Technorati:‏ &lt;a href="http://technorati.com/tags/MEF" rel="tag"&gt;MEF&lt;/a&gt;,&lt;a href="http://technorati.com/tags/extensibility" rel="tag"&gt;extensibility&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SOA" rel="tag"&gt;SOA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/CLR+4" rel="tag"&gt;CLR 4&lt;/a&gt;&lt;/div&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px;padding:0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"&gt;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515555" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/MEF/default.aspx">MEF</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Extensibility/default.aspx">Extensibility</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/SELA/default.aspx">SELA</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/CLR+4/default.aspx">CLR 4</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/extension/default.aspx">extension</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/.net/default.aspx">.net</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IoC/default.aspx">IoC</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/ImportMany/default.aspx">ImportMany</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Export/default.aspx">Export</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Import/default.aspx">Import</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Metadata/default.aspx">Metadata</category></item><item><title>Visual Studio 2010 RC Now Available</title><link>http://blogs.microsoft.co.il/blogs/stiller/archive/2010/02/09/visual-studio-2010-rc-now-available.aspx</link><pubDate>Tue, 09 Feb 2010 06:07:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515547</guid><dc:creator>Eran Stiller</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;To all of you out there who are already playing with the VS2010 and .NET 4.0 Beta 2 bits, it was &lt;a href="http://blogs.msdn.com/somasegar/archive/2010/02/08/visual-studio-2010-and-net-framework-4-release-candidate-now-available.aspx"&gt;announced&lt;/a&gt; today that the Release Candidate version is now &lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx"&gt;available for download&lt;/a&gt; for MSDN subscribers and would be made available to the general public on Wednesday.&lt;/p&gt;  &lt;p&gt;The RC version contains many performance improvements and bug fixes, and should be more mature than Beta 2. I can’t wait to download &amp;amp; install it already!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515547" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/stiller/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/stiller/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/stiller/archive/tags/VisualStudio/default.aspx">VisualStudio</category></item><item><title>מסמך השיפורים של RDP 7</title><link>http://blogs.microsoft.co.il/blogs/gadifeldman/archive/2010/02/09/rdp-7.aspx</link><pubDate>Mon, 08 Feb 2010 23:10:11 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515499</guid><dc:creator>גדי פלדמן</dc:creator><slash:comments>0</slash:comments><description>&lt;div dir="rtl" align="right"&gt;כולנו מכירים כבר את &lt;a href="http://blogs.microsoft.co.il/blogs/gadifeldman/archive/2009/01/19/remote-desktop-connection-7.aspx" target="_blank"&gt;החידושים של RDP 7&lt;/a&gt; (או RDC אם תרצו) שהוכנסו כחלק מ- Windows 7 ו- Windows Server 2008 R2.    &lt;br /&gt;לפני כמה שבועות מיקרוסופט הוציאה מסמך אשר משווה בין הביצועים של RDP 6.1 לבין האח הבכור שלו, הלא הוא כאמור ה- RDP 7.&lt;/div&gt;  &lt;div dir="rtl" align="right"&gt;&amp;#160;&lt;/div&gt;  &lt;div dir="rtl" align="right"&gt;מה אפשר ללמוד מהנתונים?&lt;/div&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="right"&gt;כ- 25% פחות שימוש ברוחב ב- Session של RDP7 עם 32-bit צבעים. משום מה 27% ו- 8% אחוז יותר שימוש ברוחב פס ב- RDP 7 לעומת 6.1 בעבודה על קובץ וורד וגלישה עם Internet Explorer באיכות צבעים של 16-bit.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="right"&gt;Session עם Font smoothing (האפשרות להצגה חדה יותר על גבי צגי LCD) צורך כמעט פי 2 יותר רוחב פס מאשר Session רגיל. החדשות הטובות הן שב- RDP7 העליה היא “רק” בסביבות ה- 80% יותר ברוחב פס.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="right"&gt;יכולת ה- Desktop Composition שהוצגה עוד ב- Vista לתצוגה חלקה יותר של ה- Session (בגדול, התצוגה המגיעה מה- Session המרוחק לא מוצגת ישירות על המסך, אלה עוברת קודם כל דרך ה- DWM אשר אוגר את כל השינויים ומציג אותם ביחד) לא ממש משנה את כמות רוחב הפס בו עושה ה- Session שימוש.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="right"&gt;תצוגת Silverlight נראת כדורשת מעט יותר רוחב פס מתצוגת Flash, אולי זה מסביר את זה שב- Silverlight נראים יותר Frames לשניה (17.3 באיכות צבעים של 32 ביט, ו- 13 ב-16 ביט) מאשר בפלאש (11.7 ו-9.3 בהתאמה).&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="right"&gt;משהו שהיה די ברור, אבל טוב שהוא הובהר. אין הבדל באיכות התצוגה כאשר נעשה Redirection של תצוגת המולטימדיה (במקרה הזה סרט במדיה פלייר) לתחנת העבודה ונעשה שימוש ב- Codec המקומי של ה- Client.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="right"&gt;השפעות של Latency אמורות להשפיע פחות על RDP7 מאיך שהן השפיעו על 6.1. למרות שנבקד רק Latency של 100mSec, ה- delay שהיה ב- session של RDP7 היה נמוך בכ- 8% מאשר ב- RDP6.1. בסה”כ נרשם delay של אחוזים בודדים (סביבות ה- 5%) בין session עם latency של 100msec לבין session ללא latency בכלל.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="right"&gt;אז אכן, נראה שנעשה שיפור משהו ב- RDP, אבל מה זה אומר בעצם? שזה אמור לתת סוג של אישור לארגונים להשתמש ב- RDS של מיקרוסופט ללא השלמות של Citrix\Quest\Ericom? או האם זה אומר שעכשיו כולנם ינהרו להטמיע את ה- VDI של מיקרוסופט? מממ… לא. בעיקר מכיוון שהתחרות בשני השווקים האלה (נגיד ונקרא להם TS ו- VDI) היא לא למי יש את הפרוטוקול הטוב ביותר – בכל מקרה בסביבות LAN הם כולם פחות או יותר זהים – אלה למי יש את היכולות הטובות ביותר בנושאים כמו ניהול מרכזי, ניהול פרופילים, ניהול עידכונים, הפצות, דיסק מרכזי, הקשר בין המערכות השונות ועוד. בעצם כל אותם הרכיבים/יכולות שמיקרוסופט משאירה לשותפים שלה להשלים.&lt;/p&gt;  &lt;p align="right"&gt;אבל בכל זאת, ה- RDP 7 נראה הרבה יותר טוב מקודמיו, כבר טוב.&lt;/p&gt;  &lt;p align="right"&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=e4d25d08-ae40-4c5c-ac81-eaacdc9923d3" target="_blank"&gt;למסמך המלא&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515499" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/gadifeldman/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/gadifeldman/archive/tags/RDC/default.aspx">RDC</category><category domain="http://blogs.microsoft.co.il/blogs/gadifeldman/archive/tags/ITPRO/default.aspx">ITPRO</category><category domain="http://blogs.microsoft.co.il/blogs/gadifeldman/archive/tags/RDP7/default.aspx">RDP7</category></item><item><title>Microsoft MVP’s,MRD’s, MRS’s and UG Managers Summit - Israel</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2010/02/08/microsoft-mvp-s-mrd-s-mrs-s-and-ug-managers-summit-israel.aspx</link><pubDate>Mon, 08 Feb 2010 21:34:36 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515485</guid><dc:creator>shair</dc:creator><slash:comments>1</slash:comments><description>&lt;h1&gt;Microsoft MVP’s,MRD’s, MRS’s and UG Managers Summit - Israel&lt;/h1&gt;  &lt;p&gt;Microsoft Israel arranged a “Movie Meeting” (we saw Avatar – My second time – still great movie) for all Microsoft Experts in Israel.   &lt;br /&gt;The event were take place in Rav-Chen Ayalon Ramat-Gan, good food, drinks, gadgets and &lt;strong&gt;most important good People.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;It’s very nice to take a break from work and meet all those great people in one place without work involved :-D&lt;/p&gt;  &lt;p&gt;Here is some pictures from the event:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3921_34A899A5.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3921" border="0" alt="IMG_3921" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3921_thumb_0F7B296C.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3922_11D4AB6A.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3922" border="0" alt="IMG_3922" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3922_thumb_5483D0D5.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3923_47A97AB7.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3923" border="0" alt="IMG_3923" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3923_thumb_4779CAF7.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3924_21A3A494.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3924" border="0" alt="IMG_3924" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3924_thumb_36657747.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3925_66AC4BFD.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3925" border="0" alt="IMG_3925" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3925_thumb_4FBD54B4.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3926_2D85492E.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3926" border="0" alt="IMG_3926" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3926_thumb_1459C929.jpg" width="184" height="244" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3927_728DF097.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3927" border="0" alt="IMG_3927" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3927_thumb_52263AD8.jpg" width="184" height="244" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3928_42A32909.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3928" border="0" alt="IMG_3928" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3928_thumb_64CB0EC2.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3929_1BC4ECFC.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3929" border="0" alt="IMG_3929" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3929_thumb_05AE5B9D.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3930_03915CD4.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3930" border="0" alt="IMG_3930" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3930_thumb_2A9BF649.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3931_41E6FABA.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3931" border="0" alt="IMG_3931" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3931_thumb_5DC809E5.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3932_5C173E11.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3932" border="0" alt="IMG_3932" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3932_thumb_1EC6637D.jpg" width="184" height="244" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3933_2AE7DDA4.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3933" border="0" alt="IMG_3933" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3933_thumb_4D7BF652.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3934_7DC2CB08.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3934" border="0" alt="IMG_3934" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3934_thumb_2776202F.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3935_37A1E828.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3935" border="0" alt="IMG_3935" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3935_thumb_4931D2F3.jpg" width="244" height="184" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3937_52AA9169.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3937" border="0" alt="IMG_3937" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3937_thumb_7D364C79.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3938_148150EB.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3938" border="0" alt="IMG_3938" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3938_thumb_6A51A302.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3939_41D2C0EE.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3939" border="0" alt="IMG_3939" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3939_thumb_3A66DB74.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3940_71CCECA2.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3940" border="0" alt="IMG_3940" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3940_thumb_4E50483D.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3941_57C906B3.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3941" border="0" alt="IMG_3941" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3941_thumb_6A315768.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3942_2FD5E187.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3942" border="0" alt="IMG_3942" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3942_thumb_4FC13E84.jpg" width="244" height="184" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3944_6E2B7F6D.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3944" border="0" alt="IMG_3944" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3944_thumb_5EC7F791.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3945_64366835.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3945" border="0" alt="IMG_3945" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3945_thumb_197F7A9B.jpg" width="244" height="184" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3948_37E9BB84.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3948" border="0" alt="IMG_3948" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3948_thumb_1B2020A2.jpg" width="244" height="184" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3950_2498DF18.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3950" border="0" alt="IMG_3950" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3950_thumb_66DBD18E.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3951_3E5CEF7A.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3951" border="0" alt="IMG_3951" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3951_thumb_2C0402EB.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3953_5C4AD7A1.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3953" border="0" alt="IMG_3953" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3953_thumb_65E3200A.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3954_4B3683F1.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3954" border="0" alt="IMG_3954" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3954_thumb_26E179A2.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3955_5E478AD0.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3955" border="0" alt="IMG_3955" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3955_thumb_2C203A86.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3956_7877CE27.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3956" border="0" alt="IMG_3956" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3956_thumb_1A9FB3E1.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3957_18EEE80D.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3957" border="0" alt="IMG_3957" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3957_thumb_3B8300BB.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3958_04C5A5B7.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3958" border="0" alt="IMG_3958" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3958_thumb_1FCE4EF8.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3914_1E1D8324.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3914" border="0" alt="IMG_3914" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3914_thumb_27499898.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3915_507130D6.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3915" border="0" alt="IMG_3915" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3915_thumb_0CD97FB4.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3916_722CE39A.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3916" border="0" alt="IMG_3916" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3916_thumb_5C828530.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3917_41D5E917.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3917" border="0" alt="IMG_3917" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3917_thumb_1D14ABD3.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3918_4231F63F.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3918" border="0" alt="IMG_3918" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3918_thumb_1DDCEBF0.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3919_3527F061.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3919" border="0" alt="IMG_3919" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3919_thumb_77D715CC.jpg" width="244" height="184" /&gt;&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_3920_281DEA83.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="IMG_3920" border="0" alt="IMG_3920" src="http://blogs.microsoft.co.il/blogs/shair/IMG_3920_thumb_31B632EC.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515485" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/MVP/default.aspx">MVP</category></item><item><title>SSIS – Importing data from an Oracle data source</title><link>http://blogs.microsoft.co.il/blogs/yanivmor/archive/2010/02/08/ssis-importing-data-from-an-oracle-data-source.aspx</link><pubDate>Mon, 08 Feb 2010 19:49:46 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515474</guid><dc:creator>yanivmor</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;A quick note this week: this may be a known issue for some of you, I have only got to know this little trick the other day when I had to import data from an Oracle database to a SQL Server database (believe it or not – I did not have to use an Oracle database as a source up until now…). There were quite a few tables involved and a considerable amount of data to be moved, so the obvious solution was to use SSIS for this task. If you want to use the Microsoft provider for Oracle you have to install an Oracle client on the machine that runs your SSIS packages, so that was pretty easy to accomplish and once the client was installed we started to configure the ole-db source adapter. The data was a mix of numbers and character-type data and the next message that popped up the minute I configured the source was: “Cannot retrieve the column code page info from the OLEDB provider. If the component supports the “DefaultCodePage” property, the code page from that property will be used…”. Needless to say, when you hook this into a SQL Server ole-db destination and try to run the package, it does not run and throws this error again.&lt;/p&gt;  &lt;p&gt;So, what to do? You need to change the “AlwaysUseDefaultCodePage” property of the Oracle ole-db source to True. This way the component will indeed use the machine’s default code page and things should go smooth from this point onwards.&lt;/p&gt;  &lt;p&gt;-Yaniv&lt;/p&gt;  &lt;p&gt;(This is post number 12 for week number 11 of my SQL blog challenge)&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a55c7a4a-f6ef-495a-85f4-14190716266c" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SSIS" rel="tag"&gt;SSIS&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Oracle" rel="tag"&gt;Oracle&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SQL+Server+2008" rel="tag"&gt;SQL Server 2008&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515474" width="1" height="1"&gt;</description></item><item><title>WCF Contrib v2.1 – Customize Output Caching Provider</title><link>http://blogs.microsoft.co.il/blogs/zuker/archive/2010/02/08/wcf-contrib-v2-1-customize-output-caching-provider.aspx</link><pubDate>Mon, 08 Feb 2010 19:15:09 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515468</guid><dc:creator>Amir Zuker</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Via &lt;a title="http://wcfcontrib.codeplex.com/wikipage?title=ClientChannelOutputCache" href="http://wcfcontrib.codeplex.com/wikipage?title=ClientChannelOutputCache"&gt;http://wcfcontrib.codeplex.com/wikipage?title=ClientChannelOutputCache&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Output Cache Provider Factory&lt;/b&gt;    &lt;br /&gt;This is the factory class that is responsible for creating the actual output cache provider.    &lt;br /&gt;This is where you extensibility point kicks in, you can replace the built-in factory with your own, &lt;a href="http://blogs.microsoft.co.il/blogs/zuker/archive/2010/02/06/wcf-contrib-v2-1-configuration-section.aspx"&gt;read about it here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The factory needs to have a public parameter-less constructor and implement &amp;#39;IOutputCacheProviderFactory&amp;#39;&lt;/p&gt;  &lt;pre&gt;public interface IOutputCacheProviderFactory
{
    IOutputCacheProvider CreateProvider();
}&lt;/pre&gt;

&lt;br /&gt;As you can see, this is a simple factory interface for providing the actual provider implementation.

&lt;br /&gt;&lt;b&gt;
  &lt;br /&gt;Output Cache Provider&lt;/b&gt;

&lt;br /&gt;Output cache provider is where the magic really happens.

&lt;br /&gt;This is where you should implement your custom output caching solution if you like.

&lt;pre&gt;public interface IOutputCacheProvider
{
    void AddItem(OutputCacheItemKey key, OutputCacheInterval interval, object value);
    bool TryGetItem(OutputCacheItemKey key, out object value);
}&lt;/pre&gt;

&lt;ul&gt;
  &lt;li&gt;AddItem - this method is supposed to add a new item to the output cache solution. &lt;/li&gt;

  &lt;li&gt;TryGetItem - this method should look up the output cache solution for the item that was stored. &lt;/li&gt;

  &lt;li&gt;OutputCacheInterval - you&amp;#39;re getting the desired interval as a parameter. 
    &lt;ul&gt;
      &lt;li&gt;Consider setting the fields &amp;quot;LastVisitedAt&amp;quot; and &amp;quot;AddedAt&amp;quot; to the proper values at a given time so you can reference it later. &lt;/li&gt;

      &lt;li&gt;You can use &amp;quot;IsActive()&amp;quot; method if you like to check whether the interval is active for the current time according to its policy and time properties.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;u&gt;Note:&lt;/u&gt;&lt;/b&gt; If the provider implements IDisposable, it will be disposed once the OutputCacheController is disposed.

&lt;br /&gt;The built-in provider is called &amp;quot;IntervalBasedCacheProvider&amp;quot;, it is important to know this since this too is written in a reusable way where you can plug-in your custom store.

&lt;br /&gt;The provider gets two parameters in its constructor: 

&lt;ol&gt;
  &lt;li&gt;purgeTimerIntervalInMilliseconds - The interval in milliseconds for the timer that is in charge of iterating the items and purging those which are inactive. &lt;/li&gt;

  &lt;li&gt;store - An implementation for IOutputCacheStore 
    &lt;ol&gt;
      &lt;li&gt;AddItem - The provider basically saves the key and interval in its local state, sets the time properties of the interval to the current time and adds the item to the store. &lt;/li&gt;

      &lt;li&gt;TryGetItem - When an item is requested from the cache, the provider checks if there&amp;#39;s an active key in its local state, if so, sets the last visited time to the current time and gets the item from the store. &lt;/li&gt;

      &lt;li&gt;Removing Items - In the timer callback, it iterates the keys in its local state and removes the inactive ones from the store&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;br /&gt;&lt;b&gt;Output Cache Store&lt;/b&gt;

&lt;br /&gt;The store is responsible for storing the items.

&lt;pre&gt;public interface IOutputCacheStore
{
    void SetItem(OutputCacheItemKey key, object value);
    void RemoveItem(OutputCacheItemKey key);
    bool TryGetItem(OutputCacheItemKey key, out object value);
}&lt;/pre&gt;

&lt;p&gt;The store that is provided with the built-in solution is using the SynchronizedDictionary that is a part of WCF Contrib as well.
  &lt;br /&gt;

  &lt;br /&gt;&lt;b&gt;Implementing your own custom output caching solution&lt;/b&gt;

  &lt;br /&gt;You can go about it in two ways: &lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Plug-in your own factory and provider and implement a different scenario - you can use this approach to write a provider that uses an interval-based caching solution such as HttpRuntime Caching, Enterprise Library, etc &lt;/li&gt;

  &lt;li&gt;Plug-in your own factory and still use the built-in IntervalBasedCacheProvider only with your own custom store, such as a AppFabric caching, file-system, database, etc&lt;/li&gt;
&lt;/ol&gt;
&lt;b&gt;Output Cache Item Key&lt;/b&gt;

&lt;br /&gt;It&amp;#39;s important to recognize the description of the item keys if you like to implement you own solution since you will need a way a way to correlate between the item and key. 

&lt;ul&gt;
  &lt;li&gt;The key contains the operation action and parameters and custom equality comparers if any were provided. &lt;/li&gt;

  &lt;li&gt;It can be used as a dictionary key since it overrides Equals and GetHashCode by calculating it over the action and parameters using the appropriate comparer. &lt;/li&gt;

  &lt;li&gt;ToString() is also overriden to return the aggregation of the action and parameters.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515468" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/zuker/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/zuker/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.microsoft.co.il/blogs/zuker/archive/tags/WcfContrib/default.aspx">WcfContrib</category></item><item><title>ג'ון לנדאו, המפיק של הסרט אווטאר,  בדרכו לישראל</title><link>http://blogs.microsoft.co.il/blogs/kobimagnezi/archive/2010/02/08/515410.aspx</link><pubDate>Mon, 08 Feb 2010 13:36:29 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515410</guid><dc:creator>Kobi Magnezi</dc:creator><slash:comments>0</slash:comments><description>&lt;div class="posterous_autopost"&gt;&lt;p align="center" style="text-align:center;"&gt;&lt;b&gt;&lt;span style="font-size:14.0pt;font-family:David,sans-serif;"&gt;לנדאו יגיע בחודש מרץ, ימים ספורים לאחר טקס האוסקר, כאורח חברת מטריקס וישתתף בכנס בכירים שעורכת החברה בנושא שיווק רב ערוצי, העידן החדש&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size:14.0pt;font-family:David,sans-serif;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="text-align:justify;"&gt;&lt;span style="font-size:12.0pt;font-family:David,sans-serif;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align:justify;"&gt;&lt;span style="font-size:12.0pt;font-family:David,sans-serif;"&gt;ג&amp;#39;ון לנדאו, המפיק של הסרט המצליח בכל הזמנים, אווטאר, והשותף של ג&amp;#39;ימס קמרון להצלחות טיטאניק ואווטאר,  יבקר בחודש מרץ בישראל. לנדאו יגיע לכנס שיווק רב ערוצי, העידן החדש,  של מטריקס. לנדאו יגיע לישראל ימים ספורים בלבד לאחר טקס האוסקר בו מועמד הסרט ל-9 פרסים. זו תהיה הפעם הראשונה שלנדאו מבקר בישראל.&lt;/span&gt;&lt;span style="font-size:12.0pt;font-family:David,sans-serif;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p style="text-align:justify;"&gt;&lt;span style="font-size:12.0pt;font-family:David,sans-serif;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align:justify;"&gt;&lt;span style="font-size:12.0pt;font-family:David,sans-serif;color:black;"&gt;בכנס, שיתקיים ב-14 במרץ באולם אושן שבמרכז הירידים בת&amp;quot;א, תוצג בצורה חוויתית וחדשנית תפיסת השיווק הרב ערוצי הנדרשת לאירגונים בכלל וליחידות השיווק בפרט, כדי לשרוד ולהצליח בעידן החדש. בכנס יוצגו תפיסות, מתודולוגיות, שיטות מדידה ובקרה, דוגמאות וכלים פרקטיים המדגימים כיצד ממקסמים את היחסים של הארגון עם לקוחותיו על ידי שימוש מושכל בתמהיל הערוצים בהם לקוחות הארגון נמצאים (אינטרנט, מובייל, רשתות חברתיות, מערכת ניהול קשרי לקוחות ועוד), וכיצד להציג תשואה על ההשקעה השיווקית.&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align:justify;"&gt;&lt;span style="font-size:12.0pt;font-family:David,sans-serif;color:black;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align:justify;"&gt;&lt;span style="font-size:12.0pt;font-family:David,sans-serif;color:black;"&gt;לנדאו יתאר בכנס את התהליך המרתק של הפקת הסרט שובר הקופות &amp;quot;אווטאר&amp;quot; ויסביר איך יוצרים בשורה וחדשנות בעולם שמרגיש שראה כבר הכל ואיך שיווקו את הסרט באופן רב ערוצי. לנדאו יתייחס גם להשלכות של התפתחות הטכנולוגיה על עולם הקולנוע בכלל, ועל הצורה שבה נצרוך בידור בעתיד בפרט. &lt;/span&gt;&lt;span style="font-size:12.0pt;font-family:David,sans-serif;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align:justify;"&gt;&lt;span style="font-size:12.0pt;font-family:David,sans-serif;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align:justify;"&gt;&lt;span style="font-size:12.0pt;font-family:David,sans-serif;"&gt;ג&amp;#39;ון לנדאו ידוע  בעיקר בשל עבודתו המשותפת עם הבימאי ג&amp;#39;יימס קמרון על הסרט טיטאניק שזכה להצלחה מסחררת וזיכה אותו בפרס האקדמיה לסרט הטוב ביותר.  לנדאו הפיק עוד שורה של סרטים מצליחים ביניהם: סולאריס,  דיק טרייסי, מותק הילדים התכווצו, גברת דאוטפייר, מת לחיות 2, שקרים אמיתיים ועוד. &lt;/span&gt;&lt;/p&gt;      &lt;p style="font-size:10px;"&gt;  &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;   from &lt;a href="http://magnezi.posterous.com/11331299"&gt;Kobi Magnezi&lt;/a&gt;  &lt;/p&gt;  &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515410" width="1" height="1"&gt;</description></item><item><title>איך מיקרוסופט הרגו את Windows Mobile</title><link>http://blogs.microsoft.co.il/blogs/ambious/archive/2010/02/08/windows-mobile.aspx</link><pubDate>Mon, 08 Feb 2010 10:23:50 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515397</guid><dc:creator>Ambious</dc:creator><slash:comments>0</slash:comments><description>בימים האחרונים החלו לצוץ באינטרנט כל מיני שמועות על ההכרזה הגדולה של מיקרוסופט בכנס הסלולארים הבינלאומי שיפתח ביום שני בברצלונה. הצפי הוא שמיקרוסופט תכריז על “Windows Mobile 7” – או בשמו החדש, “Windows Phone”, ובינתיים הספיקו לדלוף לרשת גם כמה פרטים על מערכת ההפעלה החדשה לטלפונים, פרטים שברובם כבר אושרו על ידי מקורות שונים בצוות הפיתוח של מיקרוסופט. לפני שאסביר מה הגורם האפשרי לכל אחת מההחלטות הללו ומה ההשלכות של זה, הנה מה שידוע בינתיים: ממשק המשתמש מבוסס על פרויקט בשם “מטרו”, שדומה מאד בממשק שלו...(&lt;a href="http://blogs.microsoft.co.il/blogs/ambious/archive/2010/02/08/windows-mobile.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515397" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/ambious/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/ambious/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/ambious/archive/tags/_DE05D905E705E805D505E105D505E405D805_/default.aspx">מיקרוסופט</category><category domain="http://blogs.microsoft.co.il/blogs/ambious/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category><category domain="http://blogs.microsoft.co.il/blogs/ambious/archive/tags/Mobile+Phones/default.aspx">Mobile Phones</category><category domain="http://blogs.microsoft.co.il/blogs/ambious/archive/tags/_D805DC05E405D505E005D905DD05_/default.aspx">טלפונים</category><category domain="http://blogs.microsoft.co.il/blogs/ambious/archive/tags/Windows+Phone/default.aspx">Windows Phone</category><category domain="http://blogs.microsoft.co.il/blogs/ambious/archive/tags/Windows+Mobile+7/default.aspx">Windows Mobile 7</category></item><item><title>SharePoint developers required</title><link>http://blogs.microsoft.co.il/blogs/dorong/archive/2010/02/08/sharepoint-developers-required.aspx</link><pubDate>Mon, 08 Feb 2010 08:29:34 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515385</guid><dc:creator>dorong</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;a href="http://www.playtech.com/html/home"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="ptLogo" border="0" alt="ptLogo" src="http://blogs.microsoft.co.il/blogs/dorong/ptLogo_2DC7A483.jpg" width="215" height="52" /&gt;&lt;/a&gt; &lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;Job description&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;The candidate will be responsible for the SharePoint at Playtech&lt;/p&gt;  &lt;p&gt;Implementation and maintenance tasks in the corporate Portal&lt;/p&gt;  &lt;p&gt;Providing services to the corporate reference and management&lt;/p&gt;  &lt;p&gt;Managing work with suppliers&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;Requirements&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;At least 3 years experience in large scale SharePoint implementation.&lt;/p&gt;  &lt;p&gt;Proven experience in managing and maintaining enterprise portal based MOSS2007&lt;/p&gt;  &lt;p&gt;Practical knowledge on SharePoint Designer&lt;/p&gt;  &lt;p&gt;Knowledge of basic Web technologies HTML, CSS, etc.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Email me your CV if it interests you.&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515385" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/dorong/archive/tags/Sharepoint/default.aspx">Sharepoint</category><category domain="http://blogs.microsoft.co.il/blogs/dorong/archive/tags/offtopic/default.aspx">offtopic</category></item><item><title>Using Cookie in Client Side (JavaScript)</title><link>http://blogs.microsoft.co.il/blogs/shlomo/archive/2010/02/08/using-cookie-in-client-side-javascript.aspx</link><pubDate>Mon, 08 Feb 2010 07:28:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515386</guid><dc:creator>Shlomo</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div dir="rtl" align="right"&gt;בהתבסס על &lt;a href="http://blogs.microsoft.co.il/blogs/shlomo/archive/2010/02/06/using-cookie-in-server-side.aspx"&gt;הפוסט הקודם&lt;/a&gt;&amp;nbsp;אדגים כאן איך ניתן לכתוב ולקרוא מה - Cookie בצד הלקוח.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;למעשה בפוסט הקודם הצגתי איך יוצרים Cookie בצד השרת שיש לו הרבה ערכים - ככה:&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;div style="FONT-FAMILY:Courier New;BACKGROUND:white;COLOR:black;FONT-SIZE:10pt;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:#2b91af;"&gt;HttpCookie&lt;/span&gt; cookie = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;HttpCookie&lt;/span&gt;(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;ClientColumns&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;for&lt;/span&gt; (&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt; j = 0; j &amp;lt; cbl.Items.Count; j++)&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cookie.Values.Add(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;, &lt;span style="COLOR:#a31515;"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;ברור שאפשר גם לייצר Cookie שיש לו רק ערך אחד&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;div style="FONT-FAMILY:Courier New;BACKGROUND:white;COLOR:black;FONT-SIZE:10pt;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:#2b91af;"&gt;HttpCookie&lt;/span&gt; cookie = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;HttpCookie&lt;/span&gt;(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;ClientColumns&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;cookie.Value = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;שימו לב להבדל בין שימוש ב - Values לבין שימוש ב - Value.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;בצד הלקוח גם כן אפשר לייצר Cookie שיש לו ערך אחד או יותר.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;הנה הפונקצייה לייצר ולקרוא מ - Cookie (הפונקצייה הועתקה &lt;a href="http://www.quirksmode.org/js/cookies.html"&gt;מכאן&lt;/a&gt; - מומלץ לקרוא)&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;div style="FONT-FAMILY:Courier New;BACKGROUND:white;COLOR:black;FONT-SIZE:10pt;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;function&lt;/span&gt; CreateCookie(name, value, expiredays) {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; expires = &lt;span style="COLOR:#a31515;"&gt;&amp;#39;&amp;#39;&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (expiredays != undefined) {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; exdate = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; Date();&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; exdate.setDate(exdate.getDate() + expiredays);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; expires = exdate.toGMTString();&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; document.cookie = name + &lt;span style="COLOR:#a31515;"&gt;&amp;quot;=&amp;quot;&lt;/span&gt; + value + (expires == &lt;span style="COLOR:#a31515;"&gt;&amp;#39;&amp;#39;&lt;/span&gt; ? &lt;span style="COLOR:#a31515;"&gt;&amp;#39;&amp;#39;&lt;/span&gt; : &lt;span style="COLOR:#a31515;"&gt;&amp;quot;;expires=&amp;quot;&lt;/span&gt; + expires) + &lt;span style="COLOR:#a31515;"&gt;&amp;quot;; path=/&amp;quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;function&lt;/span&gt; ReadCookie(name) {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; nameEQ = name + &lt;span style="COLOR:#a31515;"&gt;&amp;quot;=&amp;quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; ca = document.cookie.split(&lt;span style="COLOR:#a31515;"&gt;&amp;#39;;&amp;#39;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;for&lt;/span&gt; (&lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; i = 0; i &amp;lt; ca.length; i++) {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; c = ca[i];&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;while&lt;/span&gt; (c.charAt(0) == &lt;span style="COLOR:#a31515;"&gt;&amp;#39; &amp;#39;&lt;/span&gt;) c = c.substring(1, c.length);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (c.indexOf(nameEQ) == 0) &lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; c.substring(nameEQ.length, c.length);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;הפונקצייה CreateCookie מקבלת את השם, הערך, ובעוד כמה ימים זה יפוג.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;דוגמא לשימוש עם ערך אחד&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;div style="FONT-FAMILY:Courier New;BACKGROUND:white;COLOR:black;FONT-SIZE:10pt;"&gt;
&lt;p style="MARGIN:0px;"&gt;CreateCookie(&lt;span style="COLOR:#a31515;"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;, &lt;span style="COLOR:#a31515;"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;, 100);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;CreateCookie(&lt;span style="COLOR:#a31515;"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;, &lt;span style="COLOR:#a31515;"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;);&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;במקרה שלא נשלח ערך לפרמטר שמייצג את זמן התפוגה ה -&amp;nbsp;Cookie יעלם כשיסגרו את הדפדפן.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;דוגמא לשימוש עם יותר מערך אחד&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;div style="FONT-FAMILY:Courier New;BACKGROUND:white;COLOR:black;FONT-SIZE:10pt;"&gt;
&lt;p style="MARGIN:0px;"&gt;CreateCookie(&lt;span style="COLOR:#a31515;"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;, &lt;span style="COLOR:#a31515;"&gt;&amp;#39;Id=1&amp;amp;First Name=Shlomo&amp;amp;Work=true&amp;#39;&lt;/span&gt;);&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;קריאה ל - ReadCookie תמיד תחזיר את מה שיש ב - value של ה - Cookie.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;כלומר לא באמת קיים כזה דבר Cookie שיש לו יותר מערך אחד - אלא שבמקרה שה - Value של ה - Cookie מכיל את התו &amp;amp; האובייקט בצד השרת יודע לפרק את ה - value של ה - cookie להרבה ערכים.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;לעומת זאת בצד הלקוח אנחנו צריכים לעשות את זה לבד.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;נראה כעת את הדוגמא מהפוסט הקודם איך זה יעבוד עם שימוש בצד הלקוח .&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;ל - CheckListBpx נוסיף טיפול בצד הלקוח&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;div style="FONT-FAMILY:Courier New;BACKGROUND:white;COLOR:black;FONT-SIZE:10pt;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;asp&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;:&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;CheckBoxList&lt;/span&gt; &lt;span style="COLOR:red;"&gt;ID&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;cbl&amp;quot;&lt;/span&gt; &lt;span style="COLOR:red;"&gt;runat&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="COLOR:red;"&gt;RepeatDirection&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;Horizontal&amp;quot;&lt;/span&gt; &lt;span style="COLOR:red;"&gt;onclick&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;Change(this)&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;המתודה:&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;div style="FONT-FAMILY:Courier New;BACKGROUND:white;COLOR:black;FONT-SIZE:10pt;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;function&lt;/span&gt; Change(tbl) {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; value = CookieString(tbl);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CreateCookie(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;ClientColumns&amp;quot;&lt;/span&gt;, value, 100);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ChangeGrid(&lt;span style="COLOR:blue;"&gt;false&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;המתודה CookieString מקבלת את ה - CheckListBox ומחזירה מחרוזת מתאימה ל - Cookie.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;המתודה CreateCookie שומרת את ה - Cookie.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;המתודה ChangeGrid מעלימה את העמודות בגריד, ומקבלת את הערך false כדי להגיד למתודה שלא צריך לשנות את הערך ב - CheckBox (מכיון שכשהעמוד נטען צריך להפעיל את המתודה הזאת כדי לטעון את הערכים מה - Cookie ואז צריך לשנות את ה - CheckBox).&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;נוסיף ל - body&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;div style="FONT-FAMILY:Courier New;BACKGROUND:white;COLOR:black;FONT-SIZE:10pt;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;body&lt;/span&gt; &lt;span style="COLOR:red;"&gt;onload&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;ChangeGrid(true)&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;כעת נראה את אותם מתודות.&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;div style="FONT-FAMILY:Courier New;BACKGROUND:white;COLOR:black;FONT-SIZE:10pt;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;function&lt;/span&gt; CookieString(tbl) {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; inputArr = tbl.getElementsByTagName(&lt;span style="COLOR:#a31515;"&gt;&amp;#39;INPUT&amp;#39;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; str = &lt;span style="COLOR:#a31515;"&gt;&amp;#39;&amp;#39;&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;for&lt;/span&gt; (&lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; i = 0; i &amp;lt; inputArr.length; i++) {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; str += inputArr[i].nextSibling.innerText + &lt;span style="COLOR:#a31515;"&gt;&amp;#39;=&amp;#39;&lt;/span&gt; + inputArr[i].checked + &lt;span style="COLOR:#a31515;"&gt;&amp;#39;&amp;amp;&amp;#39;&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (str != &lt;span style="COLOR:#a31515;"&gt;&amp;#39;&amp;#39;&lt;/span&gt;) {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; str = str.substr(0, str.length - 1);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; str;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;אני מקבל מערך של כל ה - CheckBox שקיים ב - CheckBoxList.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;רץ על כולם ומייצר מחרוזת מתאימה.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;אחרי הלולאה אני מוחק את התו האחרון &amp;amp;.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;div style="FONT-FAMILY:Courier New;BACKGROUND:white;COLOR:black;FONT-SIZE:10pt;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;function&lt;/span&gt; ChangeGrid(setCheckBox) {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; value = ReadCookie(&lt;span style="COLOR:#a31515;"&gt;&amp;#39;ClientColumns&amp;#39;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (value != &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;) {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; values = value.split(&lt;span style="COLOR:#a31515;"&gt;&amp;#39;&amp;amp;&amp;#39;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; grid = document.getElementById(&lt;span style="COLOR:#a31515;"&gt;&amp;#39;&amp;lt;%= grid1.ClientID %&amp;gt;&amp;#39;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; clb = document.getElementById(&lt;span style="COLOR:#a31515;"&gt;&amp;#39;&amp;lt;%= cbl.ClientID %&amp;gt;&amp;#39;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; inputs = clb.getElementsByTagName(&lt;span style="COLOR:#a31515;"&gt;&amp;#39;INPUT&amp;#39;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;for&lt;/span&gt; (&lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; m = 0; m &amp;lt; values.length; m++) {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; display = values[m].split(&lt;span style="COLOR:#a31515;"&gt;&amp;#39;=&amp;#39;&lt;/span&gt;)[1] == &lt;span style="COLOR:#a31515;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt; ? &lt;span style="COLOR:#a31515;"&gt;&amp;#39;block&amp;#39;&lt;/span&gt; : &lt;span style="COLOR:#a31515;"&gt;&amp;#39;none&amp;#39;&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;for&lt;/span&gt; (&lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; i = 0; i &amp;lt; grid.rows.length; i++) {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; grid.rows[i].cells[m].style.display = display;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (display == &lt;span style="COLOR:#a31515;"&gt;&amp;#39;none&amp;#39;&lt;/span&gt; &amp;amp;&amp;amp; setCheckBox) {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; inputs[m].checked = &lt;span style="COLOR:blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;אני מנסה לקרוא את ה - Cookie&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;עושה מה - value מערך לפי סימן ה - &amp;amp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;אני מקבל את הגריד, ה - CheckBoxList ומערך של כל ה - CheckBox שקיימים בו.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;אני רץ בלולאה על כל הערכים ב - Cookie.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;השורה הבאה:&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="ltr" align="left"&gt;
&lt;div style="FONT-FAMILY:Courier New;BACKGROUND:white;COLOR:black;FONT-SIZE:10pt;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; display = values[m].split(&lt;span style="COLOR:#a31515;"&gt;&amp;#39;=&amp;#39;&lt;/span&gt;)[1] == &lt;span style="COLOR:#a31515;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt; ? &lt;span style="COLOR:#a31515;"&gt;&amp;#39;block&amp;#39;&lt;/span&gt; : &lt;span style="COLOR:#a31515;"&gt;&amp;#39;none&amp;#39;&lt;/span&gt;;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;במידה והערך הוא true נקבל את המילה block אחרת נקבל none&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;אני רץ על כל השורות בגריד ומגדיר לעמודה האם יראו אותה או לא.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;במידה ומוגדר שלא יראו את העמודה והגענו אחרי ה - load של ה - body - נשנה גם את הערך של ה - checkBox.&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div dir="rtl" align="right"&gt;כעת כשנריץ את העמוד - נגלה שהכול קורה בצד הלקוח וכמובן כשנסגור את הדפדפן ונפתח אותו מחדש הוא יזכור איזה עמודות רצינו לראות.&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515386" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.microsoft.co.il/blogs/shlomo/archive/tags/Cookie/default.aspx">Cookie</category></item><item><title>Back to Basics – Using MasterType Directive</title><link>http://blogs.microsoft.co.il/blogs/gilf/archive/2010/02/08/back-to-basics-using-mastertype-directive.aspx</link><pubDate>Mon, 08 Feb 2010 06:50:13 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515373</guid><dc:creator>Gil Fink</dc:creator><slash:comments>0</slash:comments><description>&lt;h1&gt;&lt;strong&gt;Back to Basics – Using MasterType Directive&lt;/strong&gt;&lt;/h1&gt;  &lt;p&gt;This post is &lt;a href="http://blogs.microsoft.co.il/blogs/gilf/.NetLogowithASP.NET_077CF9F7.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;margin-left:0px;border-top:0px;margin-right:0px;border-right:0px;" title="Back to Basics – Using MasterType Directive" border="0" alt="Back to Basics – Using MasterType Directive" align="right" src="http://blogs.microsoft.co.il/blogs/gilf/.NetLogowithASP.NET_thumb_1DD29F3C.jpg" width="376" height="72" /&gt;&lt;/a&gt;     &lt;br /&gt;a result of     &lt;br /&gt;a question that    &lt;br /&gt;I got from one    &lt;br /&gt;of the developers    &lt;br /&gt;that I work with.    &lt;br /&gt;The question was     &lt;br /&gt;how to use &lt;strong&gt;master page&lt;/strong&gt; properties from an &lt;strong&gt;ASP.NET&lt;/strong&gt; page.&lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;Setting the Environment&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;The first thing that you want to do is to expose the properties    &lt;br /&gt;as public in the &lt;strong&gt;master page&lt;/strong&gt;. For example this is code behind     &lt;br /&gt;of a simple&lt;strong&gt; master page&lt;/strong&gt; that exposes the IsPageEnabled property:&lt;/p&gt;  &lt;div style="border-bottom:gray 1px solid;border-left:gray 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;max-height:200px;font-size:8pt;overflow:auto;border-top:gray 1px solid;cursor:text;border-right:gray 1px solid;padding-top:4px;"&gt;   &lt;div style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Site1 : MasterPage&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#cc6633;"&gt;#region&lt;/span&gt; Properties&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; IsPageEnabled { get; set; }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#cc6633;"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#cc6633;"&gt;#region&lt;/span&gt; Page events&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#cc6633;"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;&lt;strong&gt;The MasterType Directive&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;When we want to use the property in a page which reference the 
  &lt;br /&gt;previous &lt;strong&gt;master page&lt;/strong&gt; we need to put the inside of it the &lt;strong&gt;MasterType&lt;/strong&gt; 

  &lt;br /&gt;&lt;strong&gt;directive&lt;/strong&gt;:&lt;/p&gt;

&lt;div style="border-bottom:gray 1px solid;border-left:gray 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;max-height:200px;font-size:8pt;overflow:auto;border-top:gray 1px solid;cursor:text;border-right:gray 1px solid;padding-top:4px;"&gt;
  &lt;div style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;
    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="background-color:#ffff00;"&gt;&amp;lt;%@ MasterType VirtualPath=&amp;quot;~/Site1.Master&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;This &lt;strong&gt;directive&lt;/strong&gt; declare that the master page of a page is strongly type.

  &lt;br /&gt; By that simple directive we gain access to the master exposed public

  &lt;br /&gt; properties and methods through the &lt;strong&gt;Master&lt;/strong&gt; property of the page. 

  &lt;br /&gt;For example this is how in the page I’ll call the IsPageEnabled property of

  &lt;br /&gt;the &lt;strong&gt;master page&lt;/strong&gt;:&lt;/p&gt;

&lt;div style="border-bottom:gray 1px solid;border-left:gray 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;max-height:200px;font-size:8pt;overflow:auto;border-top:gray 1px solid;cursor:text;border-right:gray 1px solid;padding-top:4px;"&gt;
  &lt;div style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;
    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; WebForm5 : Page&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#cc6633;"&gt;#region&lt;/span&gt; Page Events&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        Master.IsPageEnabled = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#cc6633;"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The markup of the page I use:&lt;/p&gt;

&lt;div style="border-bottom:gray 1px solid;border-left:gray 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;max-height:200px;font-size:8pt;overflow:auto;border-top:gray 1px solid;cursor:text;border-right:gray 1px solid;padding-top:4px;"&gt;
  &lt;div style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;
    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="background-color:#ffff00;"&gt;&amp;lt;%@ Page Title=&amp;quot;&amp;quot; Language=&amp;quot;C#&amp;quot; MasterPageFile=&amp;quot;~/Site1.Master&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    CodeBehind=&amp;quot;WebForm5.aspx.cs&amp;quot; Inherits=&amp;quot;TestModalDialog.WebForm5&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="background-color:#ffff00;"&gt;&amp;lt;%@ MasterType VirtualPath=&amp;quot;~/Site1.Master&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:Content&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Content1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ContentPlaceHolderID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ContentPlaceHolder1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:Content&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Lets sum up, when we use &lt;strong&gt;master pages&lt;/strong&gt; we can expose properties

  &lt;br /&gt;and methods for the pages. We use the &lt;strong&gt;MasterType&lt;/strong&gt; &lt;strong&gt;directive&lt;/strong&gt; in the

  &lt;br /&gt;page in order to create a strong type &lt;strong&gt;master page&lt;/strong&gt; inside of it. By 

  &lt;br /&gt;doing that we can pass data from the page to its master.

  &lt;br /&gt;Very easy and very useful.

  &lt;br /&gt;&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:left;margin:0px;padding:4px 4px 4px 4px;"&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://blogs.microsoft.co.il/blogs/gilf/archive/2010/02/08/back-to-basics-using-mastertype-directive.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://blogs.microsoft.co.il/blogs/gilf/archive/2010/02/08/back-to-basics-using-mastertype-directive.aspx&amp;amp;bgcolor=0080C0&amp;amp;fgcolor=FFFFFF&amp;amp;border=000000&amp;amp;cbgcolor=D4E1ED&amp;amp;cfgcolor=000000" alt="DotNetKicks Image" border="0/" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515373" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/gilf/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.microsoft.co.il/blogs/gilf/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/gilf/archive/tags/Tips+_2600_+Tricks/default.aspx">Tips &amp; Tricks</category></item><item><title>WPF: How To Animate Visibility Property?</title><link>http://blogs.microsoft.co.il/blogs/arik/archive/2010/02/08/wpf-how-to-animate-visibility-property.aspx</link><pubDate>Sun, 07 Feb 2010 22:22:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515275</guid><dc:creator>arik</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;In this post I’ll show you an easy way to add fade-in / fade-out effects to your user controls, when you change their &lt;em&gt;Visibility &lt;/em&gt;property.&lt;/p&gt;
&lt;p&gt;Adding the animation is done with an attached property, so using the code will be extremely simple.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Usage Sample&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;XAML:&lt;/p&gt;
&lt;div style="PADDING-BOTTOM:0px;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;FLOAT:none;PADDING-TOP:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:84140385-b60c-4206-b1cf-0945d90d4ea8" class="wlWriterEditableSmartContent"&gt;
&lt;div style="BORDER-BOTTOM:#000080 1px solid;BORDER-LEFT:#000080 1px solid;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;COLOR:#000;FONT-SIZE:10pt;BORDER-TOP:#000080 1px solid;BORDER-RIGHT:#000080 1px solid;"&gt;
&lt;div style="PADDING-BOTTOM:2px;BACKGROUND-COLOR:#ffffff;PADDING-LEFT:5px;PADDING-RIGHT:5px;OVERFLOW:auto;PADDING-TOP:2px;"&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Window&lt;/span&gt;&lt;span style="COLOR:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="COLOR:#ff0000;"&gt;Class&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;WpfDemoVisibilityAnimation.Window1&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#ff0000;"&gt; xmlns&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#ff0000;"&gt; xmlns&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="COLOR:#ff0000;"&gt;x&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#ff0000;"&gt; xmlns&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="COLOR:#ff0000;"&gt;common&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;clr-namespace:WPF.Common&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#ff0000;"&gt; Title&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;Window1&amp;quot;&lt;/span&gt;&lt;span style="COLOR:#ff0000;"&gt; Height&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="COLOR:#ff0000;"&gt; Width&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;300&amp;quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#a31515;"&gt;&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#a31515;"&gt;&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Button&lt;/span&gt;&lt;span style="COLOR:#ff0000;"&gt; Content&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;Hide&amp;quot;&lt;/span&gt;&lt;span style="COLOR:#ff0000;"&gt; Click&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;Hide_Click&amp;quot; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#a31515;"&gt;&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Button&lt;/span&gt;&lt;span style="COLOR:#ff0000;"&gt; Content&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;Show&amp;quot;&lt;/span&gt;&lt;span style="COLOR:#ff0000;"&gt; Click&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;Show_Click&amp;quot; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#a31515;"&gt;&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Image&lt;/span&gt;&lt;span style="COLOR:#ff0000;"&gt; common&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="COLOR:#ff0000;"&gt;VisibilityAnimation.AnimationType&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;Fade&amp;quot;&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="COLOR:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;Image&amp;quot;&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#ff0000;"&gt; Source&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;C:\Users\Public\Pictures\Sample Pictures\Desert.jpg&amp;quot; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#a31515;"&gt;&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Window&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Code Behind:&lt;/p&gt;
&lt;div style="PADDING-BOTTOM:0px;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;FLOAT:none;PADDING-TOP:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:eaaf3adb-c512-4c74-b73f-d32cd7ef3d8c" class="wlWriterEditableSmartContent"&gt;
&lt;div style="BORDER-BOTTOM:#000080 1px solid;BORDER-LEFT:#000080 1px solid;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;COLOR:#000;FONT-SIZE:10pt;BORDER-TOP:#000080 1px solid;BORDER-RIGHT:#000080 1px solid;"&gt;
&lt;div style="PADDING-BOTTOM:2px;BACKGROUND-COLOR:#ffffff;PADDING-LEFT:5px;PADDING-RIGHT:5px;OVERFLOW:auto;PADDING-TOP:2px;"&gt;&lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;void&lt;/span&gt; Hide_Click(&lt;span style="COLOR:#0000ff;"&gt;object&lt;/span&gt; sender, &lt;span style="COLOR:#2b91af;"&gt;RoutedEventArgs&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Image.Visibility = &lt;span style="COLOR:#2b91af;"&gt;Visibility&lt;/span&gt;.Hidden;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;void&lt;/span&gt; Show_Click(&lt;span style="COLOR:#0000ff;"&gt;object&lt;/span&gt; sender, &lt;span style="COLOR:#2b91af;"&gt;RoutedEventArgs&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Image.Visibility = &lt;span style="COLOR:#2b91af;"&gt;Visibility&lt;/span&gt;.Visible;&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Note that the &lt;u&gt;only&lt;/u&gt; required addition for the animation effect was setting the attached property: &lt;em&gt;VisibilityAnimation.AnimationType=&amp;quot;Fade&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You can find &lt;a href="http://blogs.microsoft.co.il/blogs/arik/VisibilityAnimation.cs.txt"&gt;here&lt;/a&gt; the full source code for the VisibilityAnimation attached property and &lt;a href="http://blogs.microsoft.co.il/blogs/arik/WpfDemoVisibilityAnimation.zip.txt"&gt;here&lt;/a&gt; the usage sample application.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where is the magic? &lt;br /&gt;&lt;/strong&gt;The magic resides in the implementation of the attached property. Before I’ll show you the code, let me explain the basic idea.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;We “register” for getting visibility property “before change” event. &lt;/li&gt;
&lt;li&gt;When an element’s visibility property tries to change, somewhere in the application, we get the notification and check if the element has our attached property. &lt;/li&gt;
&lt;li&gt;If it has, we start an animation on the &lt;em&gt;opacity&lt;/em&gt; property and force the current visibility value to &lt;em&gt;Visibility.Visible&lt;/em&gt;, This will allow the animation to present without interruptions. &lt;/li&gt;
&lt;li&gt;When the animation completes, we set the original requested value. &lt;/li&gt;
&lt;li&gt;Setting the original requested value will invoke (again) our “before change” event, so we need to keep a flag that indicates whether we already started the animation, in which case we just set the value. &lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Credit &lt;br /&gt;&lt;/strong&gt;The original idea is based on an answer from &lt;a href="http://stackoverflow.com/questions/1013817/wpf-fade-animation"&gt;stack overflow&lt;/a&gt;. I’ve improved the code, added support for the case where the Visibility was getting the value using data binding and added lots of comments.&lt;/p&gt;
&lt;p&gt;That’s it for now, &lt;br /&gt;Arik Poznanski.&lt;/p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblogs.microsoft.co.il%2fblogs%2farik%2farchive%2f2010%2f02%2f08%2fwpf-how-to-animate-visibility-property.aspx"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblogs.microsoft.co.il%2fblogs%2farik%2farchive%2f2010%2f02%2f08%2fwpf-how-to-animate-visibility-property.aspx&amp;amp;bgcolor=6600FF" /&gt;&lt;/a&gt; &lt;a href="http://dotnetshoutout.com/WPF-How-To-Animate-Visibility-Property-Arik-Poznanskis-Blog"&gt;&lt;img style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;WIDTH:100px;HEIGHT:18px;BORDER-TOP:0px;BORDER-RIGHT:0px;" alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fblogs.microsoft.co.il%2Fblogs%2Farik%2Farchive%2F2010%2F02%2F08%2Fwpf-how-to-animate-visibility-property.aspx" width="100" height="19" /&gt;&lt;/a&gt; &lt;a style="DISPLAY:none;" href="http://www.codeproject.com/script/Articles/BlogFeedList.aspx?amid=172641" rel="tag"&gt;CodeProject&lt;/a&gt;
&lt;script type="text/javascript"&gt;var dzone_url = &amp;#39;http://blogs.microsoft.co.il/blogs/arik/archive/2010/02/08/wpf-how-to-animate-visibility-property.aspx&amp;#39;;&lt;/script&gt;

&lt;script type="text/javascript"&gt;var dzone_style = &amp;#39;2&amp;#39;;&lt;/script&gt;

&lt;script src="http://widgets.dzone.com/links/widgets/zoneit.js"&gt;&lt;/script&gt;
 
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Appendix A – Source Code for VisibilityAnimation class&lt;/strong&gt;&lt;/p&gt;
&lt;div style="PADDING-BOTTOM:0px;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;FLOAT:none;PADDING-TOP:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:838a85e1-bd9c-4d45-a6a5-fe3bdd7592e5" class="wlWriterEditableSmartContent"&gt;
&lt;div style="BORDER-BOTTOM:#000080 1px solid;BORDER-LEFT:#000080 1px solid;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;COLOR:#000;FONT-SIZE:10pt;BORDER-TOP:#000080 1px solid;BORDER-RIGHT:#000080 1px solid;"&gt;
&lt;div style="PADDING-BOTTOM:2px;BACKGROUND-COLOR:#ffffff;PADDING-LEFT:5px;PADDING-RIGHT:5px;OVERFLOW:auto;PADDING-TOP:2px;"&gt;&lt;span style="COLOR:#0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;using&lt;/span&gt; System.Windows;&lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;using&lt;/span&gt; System.Windows.Data;&lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;using&lt;/span&gt; System.Windows.Media.Animation;&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;namespace&lt;/span&gt; WPF.Common&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; Supplies attached properties that provides visibility of animations&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;VisibilityAnimation&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;enum&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;AnimationType&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; No animation&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;None,&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; Fade in / Fade out&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Fade&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; Animation duration&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;const&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;int&lt;/span&gt; AnimationDuration = 300;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; List of hooked objects&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;readonly&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;FrameworkElement&lt;/span&gt;, &lt;span style="COLOR:#0000ff;"&gt;bool&lt;/span&gt;&amp;gt; _hookedElements = &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;FrameworkElement&lt;/span&gt;, &lt;span style="COLOR:#0000ff;"&gt;bool&lt;/span&gt;&amp;gt;();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; Get AnimationType attached property&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;param name=&amp;quot;obj&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt;Dependency object&lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt;AnimationType value&lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;AnimationType&lt;/span&gt; GetAnimationType(&lt;span style="COLOR:#2b91af;"&gt;DependencyObject&lt;/span&gt; obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; (&lt;span style="COLOR:#2b91af;"&gt;AnimationType&lt;/span&gt;)obj.GetValue(AnimationTypeProperty);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; Set AnimationType attached property&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;param name=&amp;quot;obj&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt;Dependency object&lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;param name=&amp;quot;value&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt;New value for AnimationType&lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;void&lt;/span&gt; SetAnimationType(&lt;span style="COLOR:#2b91af;"&gt;DependencyObject&lt;/span&gt; obj, &lt;span style="COLOR:#2b91af;"&gt;AnimationType&lt;/span&gt; value)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj.SetValue(AnimationTypeProperty, value);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; Using a DependencyProperty as the backing store for AnimationType. &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; This enables animation, styling, binding, etc...&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;readonly&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;DependencyProperty&lt;/span&gt; AnimationTypeProperty = &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;DependencyProperty&lt;/span&gt;.RegisterAttached(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#a31515;"&gt;&amp;quot;AnimationType&amp;quot;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;AnimationType&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;VisibilityAnimation&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;FrameworkPropertyMetadata&lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;AnimationType&lt;/span&gt;.None, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;PropertyChangedCallback&lt;/span&gt;(OnAnimationTypePropertyChanged)));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; AnimationType property changed&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;param name=&amp;quot;dependencyObject&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt;Dependency object&lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;param name=&amp;quot;e&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt;e&lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;void&lt;/span&gt; OnAnimationTypePropertyChanged(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;DependencyObject&lt;/span&gt; dependencyObject, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;DependencyPropertyChangedEventArgs&lt;/span&gt; e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;FrameworkElement&lt;/span&gt; frameworkElement = dependencyObject &lt;span style="COLOR:#0000ff;"&gt;as&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;FrameworkElement&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;if&lt;/span&gt; (frameworkElement == &lt;span style="COLOR:#0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// If AnimationType is set to True on this framework element, &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;if&lt;/span&gt; (GetAnimationType(frameworkElement) != &lt;span style="COLOR:#2b91af;"&gt;AnimationType&lt;/span&gt;.None)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// Add this framework element to hooked list&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HookVisibilityChanges(frameworkElement);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// Otherwise, remove it from the hooked list&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UnHookVisibilityChanges(frameworkElement);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; Add framework element to list of hooked objects&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;param name=&amp;quot;frameworkElement&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt;Framework element&lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;void&lt;/span&gt; HookVisibilityChanges(&lt;span style="COLOR:#2b91af;"&gt;FrameworkElement&lt;/span&gt; frameworkElement)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_hookedElements.Add(frameworkElement, &lt;span style="COLOR:#0000ff;"&gt;false&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; Remove framework element from list of hooked objects&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;param name=&amp;quot;frameworkElement&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt;Framework element&lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;void&lt;/span&gt; UnHookVisibilityChanges(&lt;span style="COLOR:#2b91af;"&gt;FrameworkElement&lt;/span&gt; frameworkElement)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;if&lt;/span&gt; (_hookedElements.ContainsKey(frameworkElement))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_hookedElements.Remove(frameworkElement);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; VisibilityAnimation static ctor&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;static&lt;/span&gt; VisibilityAnimation()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// Here we &amp;quot;register&amp;quot; on Visibility property &amp;quot;before change&amp;quot; event&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;UIElement&lt;/span&gt;.VisibilityProperty.AddOwner(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;FrameworkElement&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;FrameworkPropertyMetadata&lt;/span&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;Visibility&lt;/span&gt;.Visible, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VisibilityChanged, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CoerceVisibility));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; Visibility changed&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;param name=&amp;quot;dependencyObject&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt;Dependency object&lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;param name=&amp;quot;e&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt;e&lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;void&lt;/span&gt; VisibilityChanged(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;DependencyObject&lt;/span&gt; dependencyObject, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;DependencyPropertyChangedEventArgs&lt;/span&gt; e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// Ignore&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; Coerce visibility&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;param name=&amp;quot;dependencyObject&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt;Dependency object&lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;param name=&amp;quot;baseValue&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt;Base value&lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt;Coerced value&lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;object&lt;/span&gt; CoerceVisibility(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;DependencyObject&lt;/span&gt; dependencyObject, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;object&lt;/span&gt; baseValue)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// Make sure object is a framework element&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;FrameworkElement&lt;/span&gt; frameworkElement = dependencyObject &lt;span style="COLOR:#0000ff;"&gt;as&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;FrameworkElement&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;if&lt;/span&gt; (frameworkElement == &lt;span style="COLOR:#0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; baseValue;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// Cast to type safe value&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;Visibility&lt;/span&gt; visibility = (&lt;span style="COLOR:#2b91af;"&gt;Visibility&lt;/span&gt;)baseValue;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// If Visibility value hasn&amp;#39;t change, do nothing.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// This can happen if the Visibility property is set using data binding &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// and the binding source has changed but the new visibility value &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// hasn&amp;#39;t changed.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;if&lt;/span&gt; (visibility == frameworkElement.Visibility)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; baseValue;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// If element is not hooked by our attached property, stop here&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;if&lt;/span&gt; (!IsHookedElement(frameworkElement))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; baseValue;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// Update animation flag&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// If animation already started, don&amp;#39;t restart it (otherwise, infinite loop)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;if&lt;/span&gt; (UpdateAnimationStartedFlag(frameworkElement))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; baseValue;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// If we get here, it means we have to start fade in or fade out animation. &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// In any case return value of this method will be Visibility.Visible, &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// to allow the animation.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;DoubleAnimation&lt;/span&gt; doubleAnimation = &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;DoubleAnimation&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Duration = &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Duration&lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromMilliseconds(AnimationDuration))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// When animation completes, set the visibility value to the requested &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// value (baseValue)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;doubleAnimation.Completed += (sender, eventArgs) =&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;if&lt;/span&gt; (visibility == &lt;span style="COLOR:#2b91af;"&gt;Visibility&lt;/span&gt;.Visible)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// In case we change into Visibility.Visible, the correct value &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// is already set, so just update the animation started flag&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UpdateAnimationStartedFlag(frameworkElement);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// This will trigger value coercion again &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// but UpdateAnimationStartedFlag() function will reture true &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// this time, thus animation will not be triggered. &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="COLOR:#2b91af;"&gt;BindingOperations&lt;/span&gt;.IsDataBound(frameworkElement, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;UIElement&lt;/span&gt;.VisibilityProperty))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// Set visiblity using bounded value&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;Binding&lt;/span&gt; bindingValue = &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;BindingOperations&lt;/span&gt;.GetBinding(frameworkElement, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;UIElement&lt;/span&gt;.VisibilityProperty);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;BindingOperations&lt;/span&gt;.SetBinding(frameworkElement, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;UIElement&lt;/span&gt;.VisibilityProperty, bindingValue);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// No binding, just assign the value&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frameworkElement.Visibility = visibility;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;if&lt;/span&gt; (visibility == &lt;span style="COLOR:#2b91af;"&gt;Visibility&lt;/span&gt;.Collapsed || visibility == &lt;span style="COLOR:#2b91af;"&gt;Visibility&lt;/span&gt;.Hidden)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// Fade out by animating opacity&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;doubleAnimation.From = 1.0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;doubleAnimation.To = 0.0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// Fade in by animating opacity&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;doubleAnimation.From = 0.0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;doubleAnimation.To = 1.0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// Start animation&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frameworkElement.BeginAnimation(&lt;span style="COLOR:#2b91af;"&gt;UIElement&lt;/span&gt;.OpacityProperty, doubleAnimation);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// Make sure the element remains visible during the animation&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// The original requested value will be set in the completed event of &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#008000;"&gt;// the animation&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Visibility&lt;/span&gt;.Visible;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; Check if framework element is hooked with AnimationType property&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;param name=&amp;quot;frameworkElement&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt;Framework element to check&lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt;Is the framework element hooked?&lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;bool&lt;/span&gt; IsHookedElement(&lt;span style="COLOR:#2b91af;"&gt;FrameworkElement&lt;/span&gt; frameworkElement)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; _hookedElements.ContainsKey(frameworkElement);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; Update animation started flag or a given framework element&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;param name=&amp;quot;frameworkElement&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt;Given framework element&lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#808080;"&gt;///&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt; &lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="COLOR:#008000;"&gt;Old value of animation started flag&lt;/span&gt;&lt;span style="COLOR:#808080;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;bool&lt;/span&gt; UpdateAnimationStartedFlag(&lt;span style="COLOR:#2b91af;"&gt;FrameworkElement&lt;/span&gt; frameworkElement)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;bool&lt;/span&gt; animationStarted = (&lt;span style="COLOR:#0000ff;"&gt;bool&lt;/span&gt;)_hookedElements[frameworkElement];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_hookedElements[frameworkElement] = !animationStarted;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; animationStarted;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515275" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Animation/default.aspx">Animation</category><category domain="http://blogs.microsoft.co.il/blogs/arik/archive/tags/Visibility/default.aspx">Visibility</category></item><item><title>Coke steels Yotvata commercial advertisement !</title><link>http://blogs.microsoft.co.il/blogs/ohad/archive/2010/02/08/coke-steels-yotvata-commercial-advertisement.aspx</link><pubDate>Sun, 07 Feb 2010 22:07:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515271</guid><dc:creator>Ohad Israeli</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Coke showed the following commercial advertisement at the super bowl 2010…&lt;/p&gt;  &lt;p&gt;Reminds you something ???&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.yotvata.co.il/" target="_blank"&gt;Check this…&lt;/a&gt;&lt;/p&gt; &lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vNprwliU_0s&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;"&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/vNprwliU_0s&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515271" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/ohad/archive/tags/VIDEO/default.aspx">VIDEO</category><category domain="http://blogs.microsoft.co.il/blogs/ohad/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category></item><item><title>Visual Studio 2010 RC</title><link>http://blogs.microsoft.co.il/blogs/ohad/archive/2010/02/07/visual-studio-2010-rc.aspx</link><pubDate>Sun, 07 Feb 2010 21:47:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515264</guid><dc:creator>Ohad Israeli</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/somasegar/" target="_blank"&gt;Watch out Soma’s blog for an upcoming announcement targeted to MSDN subscribers…&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/ohad/VS2010_357CF52D.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="VS2010" border="0" alt="VS2010" src="http://blogs.microsoft.co.il/blogs/ohad/VS2010_thumb_3FEDA380.png" width="508" height="346" /&gt;&lt;/a&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515264" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/ohad/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/ohad/archive/tags/VS2010/default.aspx">VS2010</category></item><item><title>jQuery ו- Ajax</title><link>http://blogs.microsoft.co.il/blogs/arnold/archive/2010/02/07/jquery-ajax.aspx</link><pubDate>Sun, 07 Feb 2010 18:28:10 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515205</guid><dc:creator>Arnold</dc:creator><slash:comments>0</slash:comments><description>&lt;div dir="rtl" align="right"&gt;   &lt;table class="tableStandart" cellspacing="0"&gt;       &lt;tr&gt;         &lt;td valign="top" align="right"&gt;בעידן של Web 2.x כמעט כל אתר משתמש ב Ajax - &lt;b&gt;A&lt;/b&gt;synchronous &lt;b&gt;J&lt;/b&gt;avaScript &lt;b&gt;A&lt;/b&gt;nd &lt;b&gt;X&lt;/b&gt;ML. פיתוח בעזרת Ajax משפר את חווית הגלישה של המשתמש.             &lt;br /&gt;היום נלמד על שילוב של ajax ו jQuery.             &lt;br /&gt;זהו מאמר חמישי בסדרת המאמרים בנושא jQuery:             &lt;br /&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arnold/archive/2010/01/22/jquery.aspx"&gt;סדרת מאמרים בנושא jQuery&lt;/a&gt;             &lt;br /&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arnold/archive/2010/01/24/507521.aspx"&gt;חיפוש אובייקטים – חלק א’&lt;/a&gt;             &lt;br /&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arnold/archive/2010/01/29/511988.aspx"&gt;חיפוש אובייקטים – חלק ב’&lt;/a&gt;             &lt;br /&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/arnold/archive/2010/02/03/jquery-events-jquery.aspx" target="_blank"&gt;jQuery Events – אירועים ב jQuery&lt;/a&gt;&lt;/td&gt;          &lt;td class="thumbImg" valign="top"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="jQuery ו- Ajax" border="0" alt="jQuery ו- Ajax" src="http://blogs.microsoft.co.il/blogs/arnold/ajax_7C693C5B.jpg" width="120" height="120" /&gt; &lt;/td&gt;       &lt;/tr&gt;     &lt;/table&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt; &lt;!--more--&gt;  &lt;div dir="rtl" align="right"&gt;   &lt;h5&gt;מה זה Ajax?&lt;/h5&gt;    &lt;blockquote&gt;     &lt;p&gt;&lt;em&gt;היא טכניקה ליצירת יישומי &lt;/em&gt;&lt;a href="http://he.wikipedia.org/wiki/%D7%93%D7%A4%D7%93%D7%A4%D7%9F"&gt;&lt;em&gt;דפדפן&lt;/em&gt;&lt;/a&gt;&lt;em&gt; אינטראקטיביים המבוססים על קוד המורץ במסגרת דף &lt;/em&gt;&lt;a href="http://he.wikipedia.org/wiki/HTML"&gt;&lt;em&gt;HTML&lt;/em&gt;&lt;/a&gt;&lt;em&gt; בודד, ולא כיישום מרובה דפים, כמקובל בסביבת הווב. מטרתה העיקרית של הטכניקה היא שיפור חוויית המשתמש והאצת מהירות הטעינה של דפי האינטרנט, מאחר שהיא מאפשרת לעדכן רק חלקים מבוקשים בדף האינטרנט, ללא צורך לטעון את הדף כולו מחדש במחשבו של המשתמש.&lt;/em&gt; &lt;/p&gt;      &lt;div align="left"&gt;&lt;strong&gt;&lt;a href="http://he.wikipedia.org/wiki/AJAX_%28%D7%AA%D7%9B%D7%A0%D7%95%D7%AA%29" target="_blank"&gt;ויקידיה&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;   &lt;/blockquote&gt;    &lt;h5&gt;jQuery ו- Ajax&lt;/h5&gt;    &lt;p&gt;ספריית jQuery משלבת בתוכה אפשריות ajax החל מבסיסיות ועל למתקדמות.&lt;/p&gt;    &lt;p&gt;הספרייה כוללת את הפונקציות הבאות לעבודה עם ajax (הסבר מורחב ניתן למצוא &lt;a href="http://api.jquery.com/category/ajax/" target="_blank"&gt;באתר הספרייה&lt;/a&gt;):&lt;/p&gt;    &lt;div align="left"&gt;     &lt;ul style="direction:ltr;"&gt;       &lt;li&gt;jQuery.ajax() &lt;/li&gt;        &lt;li&gt;jQuery.get() &lt;/li&gt;        &lt;li&gt;jQuery.getJSON() &lt;/li&gt;        &lt;li&gt;jQuery.getScript() &lt;/li&gt;        &lt;li&gt;.load() &lt;/li&gt;        &lt;li&gt;jQuery.post() &lt;/li&gt;     &lt;/ul&gt;   &lt;/div&gt;    &lt;h5&gt;()get&lt;/h5&gt;    &lt;p&gt;פונקציה זו פונה לשרת בעזרת HTTP GET REQUEST ומחזירה את הנתונים שהתקבלו מהשרת:&lt;/p&gt;    &lt;div dir="ltr" class="csharpcode" align="left"&gt;     &lt;pre class="alt"&gt;$.get(url,&lt;span class="kwrd"&gt;function&lt;/span&gt;(data) {&lt;/pre&gt;

    &lt;pre&gt;     alert(data)&lt;/pre&gt;

    &lt;pre class="alt"&gt;});&lt;/pre&gt;
  &lt;/div&gt;

  &lt;p&gt;הפונקציה מקבלת קישור ולאחר ביצוע הפעולה היא מבצעת את הפונקציה עם הנתונים שהתקבלו (הנתונים יכולים להיות &lt;strong&gt;xml&lt;/strong&gt; או &lt;strong&gt;html&lt;/strong&gt;).&lt;/p&gt;

  &lt;p&gt;אנו נשתמש בפונקציה הזאת במקרה ונרצה לטעון נתונים מעמוד אחר.&lt;/p&gt;

  &lt;h5 align="right"&gt;()jQuery.getJSON&lt;/h5&gt;

  &lt;p&gt;פונקציה זהה ל-get אך במקום להחזיר html או xml היא מחזירה &lt;a href="http://he.wikipedia.org/wiki/JSON" target="_blank"&gt;json&lt;/a&gt;&lt;/p&gt;

  &lt;h5 align="right"&gt;()jQuery.getScript&lt;/h5&gt;

  &lt;p&gt;פונקציה שטוענת קובץ javascript ומריצה אותו.&lt;/p&gt;

  &lt;p&gt;הפונקציה הזאת מאוד שימושית למקרה שבו נצטרך לעושת שינויים באתר שלנו (כגון: לטעון אובייקטים חדשים) ולאחר טעינה נרצה להריץ את הסקריפט על האובייקטים החדשים והישנים&lt;/p&gt;

  &lt;p&gt;&amp;#160;&lt;/p&gt;

  &lt;h5&gt;()load.&lt;/h5&gt;

  &lt;p&gt;פונקציה זו טוענת נתונים מהשרת ומטמיעה את הנתונים לאובייקט בעמוד:&lt;/p&gt;

  &lt;div dir="ltr" class="csharpcode" align="left"&gt;
    &lt;pre class="alt"&gt;$(&lt;span class="str"&gt;&amp;#39;#result&amp;#39;&lt;/span&gt;).load(url, &lt;span class="kwrd"&gt;function&lt;/span&gt;() {&lt;/pre&gt;

    &lt;pre&gt;  alert(&lt;span class="str"&gt;&amp;#39;הנתונים נטענו&amp;#39;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre class="alt"&gt;});&lt;/pre&gt;
  &lt;/div&gt;

  &lt;p&gt;לאחר טעינה הנתונים שהתקבלו מוצגים באובייקט עם ID בשם result. &lt;/p&gt;

  &lt;p&gt;לפונקציה זו ישנה תכונה נוספת והיא להציג נתונים אשר נמצאים באובייקט ספציפי:&lt;/p&gt;

  &lt;div dir="ltr" class="csharpcode" align="left"&gt;
    &lt;pre class="alt"&gt;$(&lt;span class="str"&gt;&amp;#39;#result&amp;#39;&lt;/span&gt;).load(&lt;span class="str"&gt;&amp;#39;myPage.html #innerDiv&amp;#39;&lt;/span&gt;, &lt;span class="kwrd"&gt;function&lt;/span&gt;() {&lt;/pre&gt;

    &lt;pre&gt;  alert(&lt;span class="str"&gt;&amp;#39;הנתונים נטענו&amp;#39;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre class="alt"&gt;});&lt;/pre&gt;
  &lt;/div&gt;

  &lt;p&gt;load יטען לתוך result את הנתונים אשר נמצאים בעמוד myPage.html ו&lt;strong&gt;בתוך אובייקט innerDiv.&lt;/strong&gt;&lt;/p&gt;

  &lt;h5&gt;&lt;strong&gt;()post.&lt;/strong&gt;&lt;/h5&gt;

  &lt;p&gt;פונקציה זו פונה לשרת בעזרת HTTP POST REQUEST, שולחת פרמטרים ומחזירה את הנתונים שהתקבלו מהשרת&lt;/p&gt;

  &lt;div dir="ltr" class="csharpcode" align="left"&gt;
    &lt;pre class="alt"&gt;$.post(&lt;span class="str"&gt;&amp;quot;myPage.aspx&amp;quot;&lt;/span&gt;, {name: &lt;span class="str"&gt;&amp;quot;Arnold&amp;quot;&lt;/span&gt;, lastName: &lt;span class="str"&gt;&amp;quot;Simha&amp;quot;&lt;/span&gt; }, function(data){&lt;/pre&gt;

    &lt;pre&gt;     alert(data);&lt;/pre&gt;

    &lt;pre class="alt"&gt;} );&lt;/pre&gt;
  &lt;/div&gt;

  &lt;h5&gt;jQuery.ajax()&lt;/h5&gt;

  &lt;p&gt;זאת האפשרות הכי מתקדמת הכוללת בתוכה המון אפשריות שונות:&lt;/p&gt;

  &lt;div dir="ltr" class="csharpcode" align="left"&gt;
    &lt;pre class="alt"&gt;$.ajax({&lt;/pre&gt;

    &lt;pre&gt;   type: &lt;span class="str"&gt;&amp;quot;POST&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre class="alt"&gt;   url: &lt;span class="str"&gt;&amp;quot;myPage.aspx&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre&gt;   data: &lt;span class="str"&gt;&amp;quot;name=Arnold&amp;amp;lastName=Simha&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre class="alt"&gt;   success: &lt;span class="kwrd"&gt;function&lt;/span&gt;(msg){&lt;/pre&gt;

    &lt;pre&gt;     alert(msg);&lt;/pre&gt;

    &lt;pre class="alt"&gt;   },&lt;/pre&gt;

    &lt;pre&gt;   error: &lt;span class="kwrd"&gt;function&lt;/span&gt;(XMLHttpRequest, textStatus, errorThrown){&lt;/pre&gt;

    &lt;pre class="alt"&gt;     alert(errorThrown);&lt;/pre&gt;

    &lt;pre&gt;   }&lt;/pre&gt;

    &lt;pre class="alt"&gt; });&lt;/pre&gt;
  &lt;/div&gt;

  &lt;p&gt;בעזרת פונקציה זו נוכל לנהל את הפניה וקבלה של הנתונים בצורה יסודית יותר. &lt;/p&gt;

  &lt;h5&gt;סוף!&lt;/h5&gt;

  &lt;p&gt;במאמרים הבאים אני אשתמש המון באפשריות ajax אשר יעזור לכם להבין יותר לעומק את הנושא הזה.&lt;/p&gt;
&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515205" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/arnold/archive/tags/Jquery/default.aspx">Jquery</category><category domain="http://blogs.microsoft.co.il/blogs/arnold/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://blogs.microsoft.co.il/blogs/arnold/archive/tags/Web/default.aspx">Web</category><category domain="http://blogs.microsoft.co.il/blogs/arnold/archive/tags/DEV/default.aspx">DEV</category></item><item><title>מנהלים ומנהלי פרויקטים משוועים לדוחות אחידים</title><link>http://blogs.microsoft.co.il/blogs/msproject/archive/2010/02/07/515145.aspx</link><pubDate>Sun, 07 Feb 2010 13:33:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515145</guid><dc:creator>Michal David</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;חשוב מאד להרבה משתמשים בתוכנת Ms Project להשוות את נתוני הפרויקט מתאריכים שונים , ולמטרות שונות. &lt;/p&gt;
&lt;p&gt;במקרים רבים מחתימים קבלני משנה , ראשי צוותים ועוד על תכנון לוח זמנים של פרויקט , קבלן המשנה , ראש הצוות , מתחייב לעמוד בלו&amp;quot;ז זה.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;לדוגמא&lt;/u&gt;:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;רמי&lt;/b&gt; : ממש בעיה! נתתי לקבלן משנה תדפיס של לוח הזמנים לפני חודש, הייתה לי ישיבה איתו היום , והיה לנו ממש קשה להשוות בין הפעילויות מהתדפיס שהיה בידו , לבין הפעילויות כיום בפרויקט. אולי נוספו כמה פעילויות או שהעברתי אותם לערסל אחר אין לי מושג מה עשינו , אבל הקוד של הפעילויות השתנה !&lt;/p&gt;
&lt;p&gt;בזבזנו המון זמן עד שמצאנו כל פעילות.&lt;/p&gt;
&lt;p&gt;מה עושים? איך אפשר לייעל?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;הבעיה&lt;/u&gt;&lt;/b&gt; של רמי מוכרת. מכיוון&amp;nbsp; שהעמודה האפורה שאין לנו גישה אליה - עמודת &lt;b&gt;ID&lt;/b&gt; או &lt;b&gt;קוד&lt;/b&gt; או &lt;b&gt;מזהה&lt;/b&gt;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;( השם תלוי באיזו שפה וגרסה אתם משתמשים)&lt;/p&gt;
&lt;p&gt;שומרת על מספור רציף , ואם מוסיפים או מוחקים או מעבירים פעילויות, המספור של הפעילויות שאחריה משתנה.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;הפתרון&lt;/u&gt;&lt;/b&gt; : &lt;/p&gt;
&lt;p&gt;הוספת עמודה בשם &lt;b&gt;Unique ID&lt;/b&gt;&lt;b&gt; &lt;/b&gt;עמודה זו ממספרת כל פעילות מרגע שנוספה לפרויקט. המספור ייחודי ולא משתנה . עמודה זו תאפשר השוואת גרסאות שונות של הפרויקט מבלי לבזבז זמן על חיפוש פעילויות.&lt;/p&gt;
&lt;p&gt;להוספת העמודה : קליק ימני על עמודה שלפניה רוצים להוסיף עמודה חדשה ובחירת השדה &lt;b&gt;Unique ID&lt;/b&gt;&lt;b&gt; .&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;אראה לכם דוגמא של פרויקט שנוספה בו רק פעילות אחת , בין 2 תאריכים להשוואה :&lt;/p&gt;
&lt;p&gt;מצב ראשוני:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/msproject/uniqid1_5DCF60E2.gif"&gt;&lt;img title="uniqid1" style="BORDER-RIGHT:0px;BORDER-TOP:0px;DISPLAY:inline;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" height="347" alt="uniqid1" src="http://blogs.microsoft.co.il/blogs/msproject/uniqid1_thumb_24738CF1.gif" width="461" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;לאחר שנוספה פעילות חדשה - מספר 10 :&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/msproject/uniqid2_5597E8F3.gif"&gt;&lt;img title="uniqid2" style="BORDER-RIGHT:0px;BORDER-TOP:0px;DISPLAY:inline;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" height="339" alt="uniqid2" src="http://blogs.microsoft.co.il/blogs/msproject/uniqid2_thumb_384A433C.gif" width="450" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ניתן לראות איך אחרי שהוספנו פעילות חדשה היא קבלה ID לפי מיקום הפעילות , ולכן ה-ID של הפעילויות שאחריה השתנה , ואילו ה-Unique ID נשאר בכל הפעילויות כפי שהיה , הפעילות החדשה קבלה Unique ID ייחודי שטרם ניתן לפעילות ולכן מספרו גבוה.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515145" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/msproject/archive/tags/_D405D305E805DB05D405_/default.aspx">הדרכה</category><category domain="http://blogs.microsoft.co.il/blogs/msproject/archive/tags/_D905D905E205D505E505_/default.aspx">ייעוץ</category><category domain="http://blogs.microsoft.co.il/blogs/msproject/archive/tags/_E405E805D505D905E705D805_/default.aspx">פרויקט</category><category domain="http://blogs.microsoft.co.il/blogs/msproject/archive/tags/_D405D805DE05E205D405_/default.aspx">הטמעה</category><category domain="http://blogs.microsoft.co.il/blogs/msproject/archive/tags/Ms+Project/default.aspx">Ms Project</category><category domain="http://blogs.microsoft.co.il/blogs/msproject/archive/tags/_D805D905E405_/default.aspx">טיפ</category><category domain="http://blogs.microsoft.co.il/blogs/msproject/archive/tags/_E005D905D405D505DC05_/default.aspx">ניהול</category><category domain="http://blogs.microsoft.co.il/blogs/msproject/archive/tags/_E005D905D405D505DC05_+_E405E805D505D905E705D805D905DD05_/default.aspx">ניהול פרויקטים</category><category domain="http://blogs.microsoft.co.il/blogs/msproject/archive/tags/_D805D905E405D905DD05_/default.aspx">טיפים</category></item><item><title>SAVE THE DATE: Developers Academy 4</title><link>http://blogs.microsoft.co.il/blogs/bursteg/archive/2010/02/07/save-the-date-developers-academy-4.aspx</link><pubDate>Sun, 07 Feb 2010 12:12:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515137</guid><dc:creator>Guy Burstein</dc:creator><slash:comments>2</slash:comments><description>&lt;h1&gt;SAVE THE DATE: Developers Academy 4&lt;/h1&gt;
&lt;div&gt;
&lt;p&gt;&lt;a title="developer academy 4" href="http://click.email.microsoftemail.com/?qs=3fce32feea91d6ddb072bd8d2df9fb1886dc50ef5f3cea7cc9941c1d5d8fa594" target="_blank"&gt;&lt;img style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;MARGIN:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;" title="Developer Academy 4" border="0" alt="Developer Academy 4" align="left" src="http://blogs.microsoft.co.il/blogs/bursteg/saveTheDate_4A6ABAE4.jpg" width="707" height="476" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515137" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/Windows+Azure/default.aspx">Windows Azure</category><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/DevAcademy4/default.aspx">DevAcademy4</category><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/Silverlight+4/default.aspx">Silverlight 4</category><category domain="http://blogs.microsoft.co.il/blogs/bursteg/archive/tags/SharePoint+2010/default.aspx">SharePoint 2010</category></item><item><title>The one I remember the most</title><link>http://blogs.microsoft.co.il/blogs/nirkatz/archive/2010/02/07/the-one-i-remember-the-most.aspx</link><pubDate>Sun, 07 Feb 2010 10:21:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515155</guid><dc:creator>nirkatz</dc:creator><slash:comments>0</slash:comments><description>&lt;font face="Calibri"&gt;&lt;font size="3"&gt;If you will wake me up in the middle of the night and ask me which bug I remember the most I will tell you this story:&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;br /&gt;It was 6 months after I joined Microsoft and the installation of a new &lt;a href="http://www.microsoft.com/windowsserver2003/technologies/msmq/default.mspx"&gt;MSMQ&lt;/a&gt; build in my lab failed. This particular installation was distributed between 3 machines; Primary Server, Backup Server and a Client. The installation of the Primary and Backup servers passed however the Client installation failed. &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;I was sure that I did something wrong because this build passed the build verification tests (&lt;a href="http://en.wikipedia.org/wiki/Build_verification_test"&gt;BVT&lt;/a&gt;) on the same type of lab topology. So I uninstalled everything and tried again making sure I don’t enter a wrong value somewhere along the way, but again the client installation failed. One might ask why I didn’t look at the tracing / logs of the setup in order to understand what went wrong, well at that time there weren’t any &lt;/font&gt;&lt;span style="FONT-FAMILY:Wingdings;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin;mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;&lt;span style="mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;L&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri"&gt;. &lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;So I reinstalled my lab from scratch (these were the days before virtualization) and crossing my fingers didn’t help as the client setup failed again. &lt;/font&gt;&lt;/font&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;I called the developer in charge and after a short debugging session she found out that there was a parsing bug in the setup that caused the client setup to fail if the length machine name of the primary server and backup server were not equal. In the BVT lab all the machine names were MSMQXX (e.g. MSMQ01, MSMQ02, etc), in my lab the machines&amp;#39; name were NKPRIMARY, NKBACK1 and NKCLT1, thus&amp;nbsp;the bug was not discovered during the BVT execution.&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;I wasted almost a whole working day due to this bug but I learned 3 important lessons:&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3" face="Calibri"&gt;1.&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Diversity is very important pillar in testing and its is always better to be diverse as the customers.&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3" face="Calibri"&gt;2.&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Tracing and a logging are not nice to have but rather a must to have.&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3" face="Calibri"&gt;3.&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;SDET should know how to debug the product he or she is working working on.&lt;/font&gt;&lt;/font&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Thanks for taking the time to read my blog post.&lt;/font&gt;&lt;/font&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Nir&lt;/font&gt;&lt;/font&gt; 
&lt;p style="MARGIN:0cm 0cm 0pt;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 0pt;" class="MsoNormal"&gt;PS Just to put things in perspective here is a list of more &lt;a href="http://www.devtopics.com/20-famous-software-disasters/"&gt;serious bugs&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515155" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/nirkatz/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/nirkatz/archive/tags/Bug/default.aspx">Bug</category></item><item><title>Microsoft Business Intelligence Roadshow - Tuesday, Feb 16th </title><link>http://blogs.microsoft.co.il/blogs/itaybraun/archive/2010/02/07/microsoft-business-intelligence-roadshow-tuesday-feb-16th.aspx</link><pubDate>Sun, 07 Feb 2010 10:01:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515120</guid><dc:creator>ItayBraun</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p dir="rtl"&gt;שלום לכולם&lt;/p&gt;
&lt;p dir="rtl"&gt;בעוד שבוע וקצת יתקיים בבית מיקרוסופט ברעננה אירוע בשםMicrosoft Business Intelligence Roadshow. היה לי העונג לשמו את המרצה, רפל לוקוויקי בעבר בלונדון. אז הוא דיבר על data mining. הפעם הוא יתרכז בחידושים של SQL Server 2008 R2 ובאינטגרציה עם אופיס 2010. &lt;/p&gt;
&lt;p dir="rtl"&gt;האירוע מיועד למנהלי מערכות מידע, CTOs, מנהלי BI ולמנהלי יישומים בארגונים ויתקיים בשפה האנגלית. &lt;/p&gt;
&lt;p dir="rtl"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p dir="rtl"&gt;מומלץ להירשם כאן:&lt;/p&gt;
&lt;p dir="rtl"&gt;&lt;a href="http://www.microsoft.com/israel/promotionalMail/birshowlnd/index.html"&gt;http://www.microsoft.com/israel/promotionalMail/birshowlnd/index.html&lt;/a&gt; &lt;/p&gt;
&lt;p dir="rtl"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p dir="rtl"&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515120" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/itaybraun/archive/tags/RoadMap/default.aspx">RoadMap</category></item><item><title>Entity Framework Context Lifetime Best Practices</title><link>http://blogs.microsoft.co.il/blogs/gilf/archive/2010/02/07/entity-framework-context-lifetime-best-practices.aspx</link><pubDate>Sun, 07 Feb 2010 07:43:38 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515098</guid><dc:creator>Gil Fink</dc:creator><slash:comments>1</slash:comments><description>&lt;h1&gt;&lt;strong&gt;Entity Framework Context Lifetime Best Practices &lt;/strong&gt;&lt;/h1&gt;  &lt;p&gt;In this post I’m&lt;a href="http://blogs.microsoft.co.il/blogs/gilf/6528a4f9542d.NetFrameworkNewLogo_2325B0D5.gif"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;margin-left:0px;border-top:0px;margin-right:0px;border-right:0px;" title="Entity Framework Context Lifetime Best Practices " border="0" alt="Entity Framework Context Lifetime Best Practices " align="right" src="http://blogs.microsoft.co.il/blogs/gilf/0d6393c71e92.NetFrameworkNewLogo_thumb_6768A8D2.gif" width="240" height="74" /&gt;&lt;/a&gt;     &lt;br /&gt;going to write    &lt;br /&gt;about one of the     &lt;br /&gt;major decisions    &lt;br /&gt;that you need to     &lt;br /&gt;take when you use     &lt;br /&gt;&lt;strong&gt;ORM&lt;/strong&gt; tools like&lt;strong&gt; Entity Framework&lt;/strong&gt;.     &lt;br /&gt;This decision is the context &lt;strong&gt;lifetime&lt;/strong&gt;.&lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;Context &lt;strong&gt;lifetime&lt;/strong&gt; is a very crucial decision to make when we     &lt;br /&gt;use &lt;strong&gt;ORM&lt;/strong&gt;s. Since the context is acting as an entity cache (it holds    &lt;br /&gt;references to all the loaded entities for change tracking and    &lt;br /&gt;lazy loading purpose), it may grow very fast in memory consumption.    &lt;br /&gt; Also this behavior can cause a memory leak because if we don’t     &lt;br /&gt;dispose our context it will have references to all the loaded entities    &lt;br /&gt; and by that they will never be collected by the &lt;strong&gt;Garbage Collection&lt;/strong&gt;.     &lt;br /&gt;Another problem that raise its ugly head is keeping a context lifetime    &lt;br /&gt; to long or to short. If we dispose the context after every database    &lt;br /&gt; manipulation or query we won’t enjoy the all the features it holds    &lt;br /&gt;(for example change tracking).     &lt;br /&gt;For example the following code disposes the context very fast and     &lt;br /&gt;shows the problem I talk about:&lt;/p&gt;  &lt;div style="border-bottom:gray 1px solid;border-left:gray 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;max-height:200px;font-size:8pt;overflow:auto;border-top:gray 1px solid;cursor:text;border-right:gray 1px solid;padding-top:4px;"&gt;   &lt;div style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (var context = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SchoolEntities())&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    context.AddToDepartments(department);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    context.SaveChanges();&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;On the other hand, keeping a long running context is also bad practice.
  &lt;br /&gt;Sometimes I see developers that use the context as a singleton in their

  &lt;br /&gt;system. This is very bad since as I wrote it can cause a memory leak.

  &lt;br /&gt;Also it is bad habit because you will have transactions for longer time&amp;#160; &lt;br /&gt;than you should have them. Business transactions and connection 

  &lt;br /&gt;management should be used in very short bursts and only as they are 

  &lt;br /&gt;needed.&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;My Rules of Thumb&lt;/strong&gt;&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;u&gt;Web applications&lt;/u&gt; – use the context per request. Since in web

    &lt;br /&gt;applications we deal with requests that are very short but holds

    &lt;br /&gt;all the server transaction then they are the proper duration for 

    &lt;br /&gt;the context to live in. We will enjoy all the functionality of the

    &lt;br /&gt;context and it won’t hang up very long.&lt;/li&gt;

  &lt;li&gt;&lt;u&gt;Smart clients&lt;/u&gt; (Win Forms/WPF etc) – use a context per form.

    &lt;br /&gt;Since we don’t want to have the context as a singleton for our 

    &lt;br /&gt;application we will dispose it when we move from one form to 

    &lt;br /&gt;another. In this way we will gain a lot of the context’s abilities 

    &lt;br /&gt;and won’t suffer from the implications of long running contexts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;&lt;strong&gt;Summery&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Managing context lifetime is very crucial decision that we need to take
  &lt;br /&gt;at the starting of every project. My rules of thumb is context per

  &lt;br /&gt;request and context per form lifetimes.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:left;margin:0px;padding:4px 4px 4px 4px;"&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://blogs.microsoft.co.il/blogs/gilf/archive/2010/02/07/entity-framework-context-lifetime-best-practices.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://blogs.microsoft.co.il/blogs/gilf/archive/2010/02/07/entity-framework-context-lifetime-best-practices.aspx&amp;amp;bgcolor=0080C0&amp;amp;fgcolor=FFFFFF&amp;amp;border=000000&amp;amp;cbgcolor=D4E1ED&amp;amp;cfgcolor=000000" alt="DotNetKicks Image" border="0/" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515098" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/gilf/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.microsoft.co.il/blogs/gilf/archive/tags/Data+Access/default.aspx">Data Access</category><category domain="http://blogs.microsoft.co.il/blogs/gilf/archive/tags/ADO.NET/default.aspx">ADO.NET</category><category domain="http://blogs.microsoft.co.il/blogs/gilf/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/gilf/archive/tags/Opinion/default.aspx">Opinion</category><category domain="http://blogs.microsoft.co.il/blogs/gilf/archive/tags/Tips+_2600_+Tricks/default.aspx">Tips &amp; Tricks</category></item><item><title>Architecture Styles / Patterns</title><link>http://blogs.microsoft.co.il/blogs/mcs/archive/2010/02/07/architecture-styles-aka-architecture-patterns.aspx</link><pubDate>Sun, 07 Feb 2010 04:30:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515046</guid><dc:creator>Danny Cohen</dc:creator><slash:comments>1</slash:comments><description>&lt;div dir="rtl"&gt;&lt;img border="5" hspace="15" alt="danny cohen" vspace="5" align="right" src="http://blogs.microsoft.co.il/files/folders/502424/download.aspx" width="45" height="55" /&gt; 
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;במסגרת תהליך ניתוח ואפיון ארכיטקטורת מערכת ללקוח בעל דרישות מורכבות במיוחד, התבקשתי לענות על השאלה הבאה: &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&amp;quot;&lt;strong&gt;כיצד (או האם) ניתן לחזות מראש את המידה שבה הפתרון נותן מענה לדרישות, ולעשות זאת בשלב מוקדם ככל האפשר ?&lt;/strong&gt;&amp;quot; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;כפי שאפשר לנחש, התשובה (ליתר דיוק, חלק משמעותי ממנה) נמצאת בכותרת הפוסט הזה. מטרת הפוסט היא לספק סקירה תמציתית של &lt;/span&gt;Architecture Styles&lt;span style="FONT-SIZE:10pt;"&gt; (הידועים גם בכינוי &lt;/span&gt;Architecture Patterns&lt;span style="FONT-SIZE:10pt;"&gt;, אם כי אני מעדיף את המונח הראשון מסיבות שיובהרו בהמשך), ולכלול מספר רב ככל האפשר של קישורים והפניות למי שמעוניין\ת לקרוא עוד בנושא. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;strong&gt;שאלה ראשונה: מענה לאיזה סוג של דרישות ? &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;החלוקה הבסיסית של דרישות היא לדרישות פונקציונאליות (&lt;/span&gt;&lt;a title="Functional requirements" href="http://www.bredemeyer.com/pdf_files/functreq.pdf" target="_blank"&gt;functional requirements&lt;/a&gt;&lt;span style="FONT-SIZE:10pt;"&gt;) ודרישות לא פונקציונאליות (&lt;/span&gt;&lt;a title="Non-Functional Requirements" href="http://www.bredemeyer.com/pdf_files/NonFunctReq.PDF" target="_blank"&gt;non-functional requirements&lt;/a&gt;&lt;span style="FONT-SIZE:10pt;"&gt; או &lt;/span&gt;Quality Attributes&lt;span style="FONT-SIZE:10pt;"&gt;). מדובר בחלוקה גסה יחסית, אך יעילה למדי ונוחה למטרת הפוסט הזה (אני משער שההבחנה בין השניים הינה ברורה למדי, ולכן לא אתאר אותם לעומק בפוסט הזה). &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;את מידת המענה של הפתרון לדרישות פונקציונאליות קל (יחסית...) לבחון מבחינה טכנולוגית. &amp;quot;תופסים&amp;quot; את הדרישות האלו באמצעות תסריטים (&lt;/span&gt;scenarios&lt;span style="FONT-SIZE:10pt;"&gt;) ו – &lt;/span&gt;use cases&lt;span style="FONT-SIZE:10pt;"&gt; (או &lt;/span&gt;&lt;a title="Agile Themes, Epics &amp;amp; User Stories" href="http://agile101.net/2009/08/10/the-difference-between-agile-themes-epics-and-user-stories/" target="_blank"&gt;themes&lt;span style="FONT-SIZE:10pt;"&gt;, &lt;/span&gt;epics&lt;span style="FONT-SIZE:10pt;"&gt; ו – &lt;/span&gt;user stories&lt;/a&gt;&lt;span style="FONT-SIZE:10pt;"&gt; , תלוי במתודולוגיית הפיתוח). האתגר בדרישות אלו הוא בדרך כלל אתגר של התנהלות ופוליטיקה ארגונית (השאלה &amp;quot;מהי הפונקציונליות הרצויה&amp;quot; תלויה לעתים קרובות באופי הארגון המפתח מאשר בצרכי המשתמש הסופי), בשיקולים של מאפייני המשתמשים (רקע וניסיון, ציפיות מוצהרות ולא-מוצהרות להתהגות המערכת, ציפיות סמנטיות, עומס קוגניטיבי סביר) ועוד. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;אך מידת המענה של הפתרון לדרישות לא-פונקציונאליות היא זו שמעניינת יותר בהקשר של הפוסט הנוכחי. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;דרישות לא-פונקציונליות הן, בדרך כלל, יותר עמומות בהגדרתן של ידי הלקוח (בשל חוסר מודעות, ניסיון ו\או ידע) וכן מכיוון שניתוחן ואפיון פתרון ארכיטקטוני תקין עבור דרישות אלו היא משימה שקשה יותר לתקשר אותה לבעלי אינטרסים (&lt;/span&gt;stakeholders&lt;span style="FONT-SIZE:10pt;"&gt;) שמגיעים מרקע פחות טכנולוגי (קשה יותר בהשוואה להמחשה של מימוש דרישות פונקציונליות). &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;כאמור, ההבחנה בין דרישות פונקציונאליות לדרישות לא-פונקציונאליות היא הבחנה מעט גסה, לטעמי. הסיבה לכך היא שישנה השפעה הדדית חזקה מאוד בין דרישות אלו, בעיקר בהיבטים של איתור מגבלות הדדיות והתאמת דרישות מסוג אחד בהתאם לאילוצים שמציבים דרישות מהסוג השני (דוגמא בסיסית היא כיצד דרישה לא-פונצקיונאלית של &amp;quot;זמן תגובה&amp;quot; ו&amp;quot;רוחב פס&amp;quot;, תשפיע על היכולת לממש דרישה פונקציונאלית של כמות המידע שניתן להראות למשתמש). כמו כן, המינוח &amp;quot;דרישה לא-פונקציונאלית&amp;quot; (שמתאר את הדרישה באופן שלילי – מה היא &lt;span style="TEXT-DECORATION:underline;"&gt;לא&lt;/span&gt; מספקת) הוא פחות נוח וקולע, לדעתי, מאשר המינוח &amp;quot;&lt;/span&gt;Quality Attribute&lt;span style="FONT-SIZE:10pt;"&gt;&amp;quot; (שמתאר את הדרישה באופן חיובי – מה היא &lt;span style="TEXT-DECORATION:underline;"&gt;כן&lt;/span&gt; מספקת: מאפייני איכות). &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;strong&gt;שאלה שנייה: כיצד מצמצמים את האפשרויות ? &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;נניח שעברנו את השלב הראשון של איסוף דרישות לא-פונקציונאליות (וכמובן, דרישות פונקציונאליות, על מנת לקבל תמונה מלאה ככל האפשר של דרישות הלקוח). בשלב זה, יש בפנינו מגוון בלתי מוגבל של אפשרויות למימוש המערכת – ולו רק מכיוון שעדיין לא התחלנו לצמצם אותם... &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;וכאן נכנסים לתמונה ה – &lt;/span&gt;Architecture Styles&lt;span style="FONT-SIZE:10pt;"&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;ההגדרה ה&amp;quot;רשמית&amp;quot; של &lt;/span&gt;architecture styles&lt;span style="FONT-SIZE:10pt;"&gt; (עד כמה שניתן למצוא הגדרות רשמיות במקצוע עמו ארכיטקטורת תוכנה, שעדיין נמצא בתהליכי התגבשות), היא: &lt;/span&gt;&lt;/p&gt;
&lt;div dir="ltr"&gt;
&lt;p&gt;&amp;quot;A set of principles for a family of systems that&lt;span style="FONT-SIZE:10pt;"&gt; &lt;/span&gt;determines the vocabulary of &lt;strong&gt;components&lt;/strong&gt; and&lt;span style="FONT-SIZE:10pt;"&gt; &lt;/span&gt;&lt;strong&gt;connectors&lt;/strong&gt; that can be used in instances of that&lt;span style="FONT-SIZE:10pt;"&gt; &lt;/span&gt;style, together with a set of &lt;strong&gt;constraints&lt;/strong&gt; on how&lt;span style="FONT-SIZE:10pt;"&gt; &lt;/span&gt;they can be combined&lt;span style="FONT-SIZE:10pt;"&gt;&amp;quot;&lt;/span&gt; &lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;(מתוך המאמר המומלץ בחום &amp;quot;&lt;/span&gt;&lt;a title="Introduction to Software Architecture" href="http://www.cs.cmu.edu/afs/cs/project/able/ftp/intro_softarch/intro_softarch.pdf" target="_blank"&gt;Introduction to Software Architecture&lt;/a&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&amp;quot; של &lt;/span&gt;David Garlan and Mary Shaw&lt;span style="FONT-SIZE:10pt;"&gt; מ – 1994. מאמר שאפשר לשייך לו&amp;nbsp;לא מעט השפעה בהיסטוריה של מקצוע ארכיטקטורת תוכנה). &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;ישנו דמיון רב בין &lt;/span&gt;Design Patterns&lt;span style="FONT-SIZE:10pt;"&gt; לבין &lt;/span&gt;Architecture Styles&lt;span style="FONT-SIZE:10pt;"&gt; (הכינוי הנפוץ &amp;quot;&lt;/span&gt;Architecture Patterns&lt;span style="FONT-SIZE:10pt;"&gt;&amp;quot; מעיד על כך). עם זאת מדובר במשפחות שונות של תבניות (&lt;/span&gt;Patterns&lt;span style="FONT-SIZE:10pt;"&gt;) שגם ממוקמות ברמות שונות בהיררכיה של ניתוח ואפיון מערכות תוכנה (רמת הארכיטקטורה לעומת רמת העיצוב – &lt;/span&gt;design&lt;span style="FONT-SIZE:10pt;"&gt; – של המערכת). בגדול, אפשר לתאר את ה – &lt;/span&gt;architecture styles&lt;span style="FONT-SIZE:10pt;"&gt; כתבניות בעלות נפח והשפעה מערכתית גדולים יותר (לעתים, הרבה יותר) מאשר &lt;/span&gt;Design Patterns&lt;span style="FONT-SIZE:10pt;"&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;במסגרת &lt;a title="Software Architecture Workshop" href="http://blogs.microsoft.co.il/blogs/mcs/archive/2010/01/20/501760.aspx" target="_blank"&gt;סדנת ארכיטקטורת התוכנה&lt;/a&gt; אנו דנים לא מעט על &lt;/span&gt;Architecture styles&lt;span style="FONT-SIZE:10pt;"&gt;. על מנת לספק תיאור הולם של הנושא אני מצרף את &lt;a title="Architecture Styles (AKA Architecture Patterns)" href="http://blogs.microsoft.co.il/files/folders/515047/download.aspx" target="_blank"&gt;המצגת&lt;/a&gt; שעסקה בנושא במהלך הסדנא, כמו כן (בסוף הפוסט) אני כולל רשימה של מקורות שבהם ניתן לקבל מידע נוסף על &lt;/span&gt;Architecture Styles&lt;span style="FONT-SIZE:10pt;"&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="FONT-SIZE:10pt;"&gt;שאלה שלישית: כיצד בוחרים את ה – &lt;/span&gt;Architecture Style&lt;span style="FONT-SIZE:10pt;"&gt; המתאים ? &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;לכל &lt;/span&gt;Architecture Style&lt;span style="FONT-SIZE:10pt;"&gt; יש מגוון מסוים וידוע מראש של מאפיינים אותם הוא מספק (במידה זו או אחרת). מאפיינים אלו ניתנים לניסוח כאותם &lt;/span&gt;Quality Attributes&lt;span style="FONT-SIZE:10pt;"&gt;, הידועים כדרישות לא-פונקציונאליות. דוגמא אחת היא ה – &lt;/span&gt;Pipes and Filters architecture style&lt;span style="FONT-SIZE:10pt;"&gt; (ה - &lt;/span&gt;style&lt;span style="FONT-SIZE:10pt;"&gt; החביב עלי), שמאפשר לספק &lt;/span&gt;Quality Attributes&lt;span style="FONT-SIZE:10pt;"&gt; כגון: &lt;/span&gt;Configurability, Composeability, Manageability, Reusability, Testability&lt;span style="FONT-SIZE:10pt;"&gt; ועוד (הגדרת ה – &lt;/span&gt;Quality Attributes&lt;span style="FONT-SIZE:10pt;"&gt; הנ&amp;quot;ל אינה ב – &lt;/span&gt;scope&lt;span style="FONT-SIZE:10pt;"&gt; של הפוסט הנוכחי, אך ניתן ללמוד יותר בקישורים המצורפים). &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;וכאן אנו מגיעים לנקודה המרכזית – &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="FONT-SIZE:10pt;"&gt;היכולת לבחון ולבחור &lt;/span&gt;Architecture Styles&lt;span style="FONT-SIZE:10pt;"&gt; בהתאם למידת התאמתם ל – &lt;/span&gt;Quality Attributes&lt;span style="FONT-SIZE:10pt;"&gt; (הדרישות הלא-פונקציונאליות) של המערכת, היא זו המאפשרת להמחיש כיצד פתרון ארכיטקטוני מספק מענה לדרישות אלו. &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;כמו כן, בזכות ההשפעה ההדדית הרבה בין דרישות לא-פונקציונאליות ודרישות פונקציונאליות, ניתן להדגים גם כיצד הפתרון הארכיטקטוני מספק מענה עקיף אך חיוני למימוש הדרישות הפונקציונאליות. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;מידת ההתאמה ל – &lt;/span&gt;quality attributes&lt;span style="FONT-SIZE:10pt;"&gt; נובעת מהמאפיינים המובנים והידועים מראש של ה – &lt;/span&gt;Architecture Styles&lt;span style="FONT-SIZE:10pt;"&gt; השונים (כאן בא לידי ביטוי הדמיון הרבה בינם לבין &lt;/span&gt;Patterns&lt;span style="FONT-SIZE:10pt;"&gt; בכלל). הניסיון הרב שנצבר במימוש ה – &lt;/span&gt;Architecture Styles&lt;span style="FONT-SIZE:10pt;"&gt; השונים מספק מידע רב לגבי יתרונותיהם וחסרונותיהם בהתייחס למגוון של תסריטים, וכן, עצם השימוש במונחים אחידים (&lt;/span&gt;vocabulary&lt;span style="FONT-SIZE:10pt;"&gt;) מאפשר תקשורת יעילה מול ארכיטקטי תוכנה אחרים על מנת לאסוף המלצות, תובנות, הערות והארות בשלב מוקדם ככל האפשר בתהליך הניתוח האפיון. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;כל זאת, בלי לזלזל או להתעלם מחשיבות הרבה שיש למימוש בפועל של ה – &lt;/span&gt;Architecture Style&lt;span style="FONT-SIZE:10pt;"&gt; על היכולת לספק מענה לדרישות השונות. &lt;br /&gt;לאחר צמצום האפשרויות ובחירת מספר &lt;/span&gt;Architecture styles&lt;span style="FONT-SIZE:10pt;"&gt; שמועמדים לאימוץ במסגרת הפתרון הארכיטקטוני, מומלץ (מלשון &amp;quot;חובה&amp;quot; &lt;/span&gt;&lt;span style="FONT-FAMILY:Wingdings;"&gt;J&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;"&gt;), לבחון מאפיינים מעשיים, מדידים ומוחשיים של פתרונות אפשריים שמממשים &lt;/span&gt;Architecture Style&lt;span style="FONT-SIZE:10pt;"&gt; שמועמד לשימוש. היות ורוב ה – &lt;/span&gt;Architecture Styles&lt;span style="FONT-SIZE:10pt;"&gt; מומשו במסגרת &lt;/span&gt;Framework&lt;span style="FONT-SIZE:10pt;"&gt; או מוצר זה או אחר, וזמינים לשימוש כ&amp;quot;קופסא שחורה&amp;quot;, עולה השאלה של מידת ההתאמה של המוצר (או הרכיב, או התשתית וכו&amp;#39;) לתסריט הספציפי עבורו מנסים לספק מענה. כמו תמיד – אלוהים נמצא בפרטים הקטנים (והשטן גם). &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;strong&gt;ולסיכום - &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;לולא היכולת הבסיסית הזו (למתוח קו המחבר בין דרישה לבין היכולת של המענה הארכיטקטוני לענות על הדרישה) לא היה בסיס תועלתי לקיום תהליך ניתוח ואפיון ארכיטקטוני. למרות שהתהליך אינו מושלם, אובייקטיבי, או מדיד באופן אבסולוטי, שיטת הניתוח והאפיון שכוללת שימוש ב – &lt;/span&gt;Architecture Styles&lt;span style="FONT-SIZE:10pt;"&gt; הינה השיטה הטובה ביותר הידועה כיום לספק תחזית מוקדמת לגבי מידת המענה של פתרון לדרישה, ולגבות תחזית זו בנתונים, ידע וניסיון. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;strong&gt;קישורים למקורות מידע נוספים בנושא - &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;FONT-SIZE:11pt;mso-bidi-font-family:Arial;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-size:10.0pt;mso-fareast-theme-font:minor-fareast;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:HE;"&gt;&lt;a href="http://www.cs.cmu.edu/afs/cs/project/able/ftp/intro_softarch/intro_softarch.pdf"&gt;&lt;font color="#0000ff"&gt;Introduction to Software Architecture&lt;/font&gt;&lt;/a&gt;&amp;nbsp;- המאמר המייסד של התחום&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;FONT-SIZE:11pt;mso-bidi-font-family:Arial;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-size:10.0pt;mso-fareast-theme-font:minor-fareast;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:HE;"&gt;&lt;a title="MS P&amp;amp;P App. Arch. Guide 2.0" href="http://msdn.microsoft.com/en-us/library/dd673617.aspx" target="_blank"&gt;Microsoft Patterns &amp;amp; Prectices Application Architecture Guide 2.0&lt;/a&gt; - &lt;a title="App. Patterns &amp;amp; Styles" href="http://msdn.microsoft.com/en-us/library/ee658117.aspx" target="_blank"&gt;Chapter 3 - Architectural Patterns and Styles&lt;/a&gt;&amp;nbsp;- ספר מצוין של החבר&amp;#39;ה מ - Patterns &amp;amp; Practices &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;FONT-SIZE:11pt;mso-bidi-font-family:Arial;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-size:10.0pt;mso-fareast-theme-font:minor-fareast;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:HE;"&gt;&lt;a title="POSA1" href="http://www.amazon.com/Pattern-Oriented-Software-Architecture-System-Patterns/dp/0471958697" target="_blank"&gt;Pattern-Oriented Software Architecture -&amp;nbsp;A System of Patterns&lt;/a&gt;&amp;nbsp;- החלק הראשון בסדרה (POSA1), ולטעמי הטוב שבהם. מכיל סקירה מצוינת של מגוון Architecture Styles.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;FONT-SIZE:11pt;mso-bidi-font-family:Arial;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-size:10.0pt;mso-fareast-theme-font:minor-fareast;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:HE;"&gt;מצגת &lt;a title="Architecture Styles (AKA Architecture Patterns)" href="http://blogs.microsoft.co.il/files/folders/515047/download.aspx" target="_blank"&gt;Architecture Styles&lt;/a&gt; מתוך &lt;a title="סדנת ארכיטקטורת תוכנה" href="http://blogs.microsoft.co.il/blogs/mcs/archive/2010/01/20/501760.aspx" target="_blank"&gt;סדנת ארכיטקטורת תוכנה&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;HTH, &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;דני.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;"&gt;
&lt;hr /&gt;

&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;a title="Danny Cohen" href="http://www.linkedin.com/in/danco" target="_blank"&gt;&lt;img border="5" hspace="5" alt="danny cohen" vspace="5" align="right" src="http://blogs.microsoft.co.il/files/folders/502424/download.aspx" width="45" height="55" /&gt;&lt;/a&gt; &lt;/td&gt;
&lt;td&gt;&amp;nbsp;שמי&lt;a title="Danny Cohen - Linkedin profile" href="http://linkedin.com/in/danco" target="_blank"&gt; דני כהן&lt;/a&gt; ואני ארכיטקט ויועץ בצוות MCS Israel, ומתמחה&amp;nbsp;במערכות מבוזרות, Cloud Computing,&amp;nbsp;מתודולוגיות&amp;nbsp;פיתוח וארכיטקטורת תוכנה.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;hr /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515046" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/mcs/archive/tags/MCS/default.aspx">MCS</category><category domain="http://blogs.microsoft.co.il/blogs/mcs/archive/tags/Architect/default.aspx">Architect</category><category domain="http://blogs.microsoft.co.il/blogs/mcs/archive/tags/Development+Methodology/default.aspx">Development Methodology</category><category domain="http://blogs.microsoft.co.il/blogs/mcs/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.microsoft.co.il/blogs/mcs/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/mcs/archive/tags/Hebrew/default.aspx">Hebrew</category><category domain="http://blogs.microsoft.co.il/blogs/mcs/archive/tags/P_2600_amp_3B00_P/default.aspx">P&amp;amp;P</category></item></channel></rss>