<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Lê Minh's Blog</title>
	<atom:link href="http://hoangleminh.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://hoangleminh.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Fri, 14 Nov 2008 04:12:31 +0000</lastBuildDate>
	<language>vi</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='hoangleminh.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Lê Minh's Blog</title>
		<link>http://hoangleminh.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://hoangleminh.wordpress.com/osd.xml" title="Lê Minh&#039;s Blog" />
	<atom:link rel='hub' href='http://hoangleminh.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Tạo Media Player trong Silverlight</title>
		<link>http://hoangleminh.wordpress.com/2008/11/10/t%e1%ba%a1o-media-player-trong-silverlight/</link>
		<comments>http://hoangleminh.wordpress.com/2008/11/10/t%e1%ba%a1o-media-player-trong-silverlight/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 05:03:00 +0000</pubDate>
		<dc:creator>hoangleminh</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[MediaElement]]></category>

		<guid isPermaLink="false">http://hoangleminh.wordpress.com/?p=31</guid>
		<description><![CDATA[Hồi tháng 8/2008, khi tôi bắt đầu tìm hiểu về Silverlight, đọc các bài báo giới thiệu về công nghệ này, tôi thấy nhiều bài đánh giá Silverlight mạnh nhất ở streaming video với nhiều định dạng khác nhau (đặc biệt là wmv của Microsoft), tôi đã có kế hoạch viết một một chương trình [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoangleminh.wordpress.com&amp;blog=4997870&amp;post=31&amp;subd=hoangleminh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hồi tháng 8/2008, khi tôi bắt đầu tìm hiểu về Silverlight, đọc các bài báo giới thiệu về công nghệ này, tôi thấy nhiều bài đánh giá Silverlight mạnh nhất ở streaming video với nhiều định dạng khác nhau (đặc biệt là wmv của Microsoft), tôi đã có kế hoạch viết một một chương trình chơi video bằng Silverlight xem thực hư thế nào. Khi xây dựng chương trình, có khá nhiều vấn đề thú vị nảy sinh mà tôi đã giải quyết, mong muốn viết ra để chia sẻ với mọi người từ lâu nhưng giờ mới có thời gian ngồi viết entry này, mong muốn sẽ giúp được nhiều người (nhất là newbie đang tìm hiểu về silverlight)<br />
Bạn có thể download source project <a href="http://www.hoangleminh.com/download/MediaPlayer_Silverlight2_NotVisualState.zip">tại đây</a>, nhưng tôi khuyên với các bạn mới học thì nên làm theo các bước tôi trình bày bên dưới, tự mình làm sẽ nhớ lâu hơn mà</p>
<p>Xem Demo tại <a href="http://www.hoangleminh.com/Silverlight/MediaPlayer.html">http://www.hoangleminh.com/www/Silverlight/MediaPlayer.html</a></p>
<p><img src="http://www.hoangleminh.com/images/MediaPlayer.png" alt="Media Player" /></p>
<p>Phân tích các vấn đề cơ bản cần giải quyết thì một chương trình play video cơ bản cần phải có đó là :</p>
<ul>
<li> Play/Pause/Stop (cái này đơn giản vì MediaElement của Silverlight hỗ trợ hết cá method này)</li>
<li> Thanh trượt Slider để ‘tua’ khi đang xem media và tự động slide khi video đang chạy</li>
<li> Thanh trượt để điều chỉnh volume</li>
<li> Hiển thị tổng thời gian và thời gian hiện tại</li>
<li> Fullscreen</li>
<li> Replay</li>
</ul>
<p>Sau khi đã có một công cụ để chơi video cơ bản, việc xây dựng các hàm JavaScript tương tác với chương trình Silverlight cũng khá quan trọng</p>
<ul>
<li> Tạo JavaScript API như function Play, Pause, SetSouceVideo, FullScreen…</li>
<li> Up chương trình lên web (vì hiện tại chưa có nhiều host hỗ trợ Framework 3.5 nên việc đưa một </li>
</ul>
<p>chương trình Silverlight 2 lên web là khá khó khăn, tôi sẽ hướng dẫn cách dùng http://silverlight.live.com của Microsoft hỗ trợ cộng đồng lập trình Silverlight)  Tôi sẽ trình bày vấn đề này ở entry sau, không thì entry này dài quá<br />
Công việc cần làm là vậy giờ bắt tay vào giải quyết thôi!!!</p>
<p><strong>1.	Play, Pause</strong><br />
Cái này đơn giản nhất giải quyết trước, sử dụng ToogleButton</p>
<pre>MediaElement mePlayer;
ToogleButton btnPlay;
btnPlay.Checked += new RoutedEventHandler(btnPlay_Checked);
void btnPlay_Unchecked(object sender, RoutedEventArgs e)
{
mePlayer.Pause();
btnPlay.Content = "Play";
}
void btnPlay_Checked(object sender, RoutedEventArgs e)
{
mePlayer.Play();
btnPlay.Content = "Pause";
}
</pre>
<p><strong>2.	Slider (thanh trượt theo thời gian Play video)</strong><br />
<strong>2.1.	Slider tự động chạy khi video đang chạy</strong><br />
Sử dụng đối tượng timer, khi MediaElement đang ở trạng thái play thì cứ 1s lại gọi method thay đổi vị trí của thumbs trên slider<br />
<code>CustomSlider sliderTime; //CustomSlider là Slider tự viết kế thừa từ Slider của Silverlight, sao lại có đối tượng này thì bạn theo dõi 2.2 sẽ rõ<br />
TextBlock tbTime; //Hiển thị current time và tổng time của video<br />
bool isSliderTimeLock = false;<br />
timer = new DispatcherTimer();<br />
timer.Interval = TimeSpan.FromMilliseconds(50);<br />
timer.Tick += new EventHandler(timer_Tick);<br />
void mePlayer_CurrentStateChanged(object sender, RoutedEventArgs e)<br />
{<br />
if(mePlayer.CurrentState == MediaElementState.Playing)<br />
{<br />
timer.Start();<br />
}<br />
else<br />
{<br />
timer.Stop();<br />
}<br />
}</p>
<p>void timer_Tick(object sender, EventArgs e)<br />
{<br />
if((mePlayer.NaturalDuration.TimeSpan.TotalSeconds &gt; 0) &amp;&amp; (isSliderTimeLock == false))<br />
{<br />
tbTime.Text = string.Format("{0:00}:{1:00}", mePlayer.Position.Minutes, mePlayer.Position.Seconds);<br />
sliderTime.Value = mePlayer.Position.TotalSeconds/mePlayer.NaturalDuration.TimeSpan.TotalSeconds;<br />
}<br />
}<br />
</code><br />
<strong>2.2.	Kéo chuột để chạy đến thời gian mong muốn</strong><br />
Cái này tưởng đơn giản nhưng làm tôi mất tới một tiếng để thực hiện, nguyên nhân là do một bug của Silverlight (từ Silverlight 2 beta 2, đến phiên bản Silverlight 2 tôi kiểm tra thấy vẫn còn, mặc dù đó là một bug đã được report và ghi nhận), số là thằng Slider có event là MouseLeftButtonUp và MouseLeftButtonDown đọc lên biết đoán ra ngay sự kiện này là gì, nhưng khổ nỗi dùng chuột kéo thả cái thumbs thì chả thấy gì cả<br />
Cái này được tôi giải quyết bằng cách tạo CustomSlider kế thừa từ Silder và tự định nghĩa 2 sự kiện DragStarted và DragCompleted<br />
<code>public class CustomSlider:System.Windows.Controls.Slider<br />
{<br />
public CustomSlider():base()<br />
{<br />
DefaultStyleKey = typeof (CustomSlider);<br />
}<br />
public event EventHandler ThumbDragStarted;<br />
public event EventHandler ThumbDragCompleted;<br />
public override void OnApplyTemplate()<br />
{<br />
base.OnApplyTemplate();<br />
//Set up drag event handlers<br />
Thumb thumb = this.GetTemplateChild("HorizontalThumb") as Thumb; if (thumb != null)<br />
{<br />
thumb.DragStarted += new DragStartedEventHandler(thumb_DragStarted);<br />
thumb.DragCompleted += new DragCompletedEventHandler(thumb_DragCompleted);<br />
}<br />
}<br />
void thumb_DragCompleted(object sender, DragCompletedEventArgs e)<br />
{<br />
OnThumbDragCompleted(this, new EventArgs());<br />
}<br />
void thumb_DragStarted(object sender, DragStartedEventArgs e)<br />
{<br />
OnThumbDragStarted(this, new EventArgs());<br />
}<br />
public virtual void OnThumbDragStarted(object sender, EventArgs e)<br />
{<br />
if (ThumbDragStarted != null)<br />
ThumbDragStarted(sender, e);<br />
}<br />
protected virtual void OnThumbDragCompleted(object sender, EventArgs e)<br />
{<br />
if (ThumbDragCompleted != null)<br />
ThumbDragCompleted(sender, e);</p>
<p>}<br />
}<br />
</code><br />
Giờ tôi sẽ sử dụng cái CustomSlider này cho sliderTime (tua video) và sliderVolume (chỉnh volume)<br />
<code>void sliderTime_ThumbDragCompleted(object sender, EventArgs e)<br />
{<br />
isSliderTimeLock = false;<br />
mePlayer.Position = TimeSpan.FromMilliseconds(mePlayer.NaturalDuration.TimeSpan.TotalMilliseconds * sliderTime.Value);<br />
}</p>
<p>void sliderTime_ThumbDragStarted(object sender, EventArgs e)<br />
{<br />
isSliderTimeLock = true;<br />
}<br />
//Chỉnh volume<br />
CustomeSlider sliderVolume;<br />
void sliderVolume_ValueChanged(object sender, RoutedPropertyChangedEventArgs e)<br />
{<br />
mePlayer.Volume = sliderVolume.Value;<br />
}<br />
</code><br />
<strong>3.	FullScreen</strong><br />
Sử dụng đối tượng  System.Windows.Interop.SilverlightHost để thực hiện chức năng này<br />
<code>private System.Windows.Interop.SilverlightHost host;<br />
Button btnFullScreen;<br />
btnFullScreen.Click += new RoutedEventHandler(btnFullScreen_Click);<br />
host.Content.FullScreenChanged += new EventHandler(Content_FullScreenChanged);</p>
<p>void btnFullScreen_Click(object sender, RoutedEventArgs e)<br />
{<br />
Application.Current.Host.Content.IsFullScreen = !Application.Current.Host.Content.IsFullScreen;<br />
}</p>
<p>void Content_FullScreenChanged(object sender, EventArgs e)<br />
{<br />
if (host.Content.IsFullScreen)<br />
{<br />
userControl.Width = Application.Current.Host.Content.ActualWidth;<br />
userControl.Height = Application.Current.Host.Content.ActualHeight;</p>
<p>mePlayer.Width = Application.Current.Host.Content.ActualWidth;<br />
mePlayer.Height = Application.Current.Host.Content.ActualHeight;</p>
<p>}<br />
else<br />
{<br />
userControl.Width = old_Width;<br />
userControl.Height = old_Height;</p>
<p>mePlayer.Width = old_MediaWidth;<br />
mePlayer.Height = old_MediaHeight;<br />
}<br />
}</p>
<p></code><br />
Ta đã có một chương trình chơi media cơ bản, giờ xây dựng JavaScript API<br />
<strong>4.	JavaScript API</strong><br />
Theo tư duy thông thường thì ta phải tìm cách thế nào đó để JavaScript có thể chọc được vào trong ứng dụng Silverlight để gọi các function được định nghĩa bên trọng ứng dụng Silverlight<br />
<strong>4.1.	Lấy ra object Silverlight</strong><br />
Trong trang MediaPlayerTestPage.aspx:<br />
<code>
<div style="height:100%;"></div>
<p>Mã JavaScript để lấy ra object Silverlight nhúng trong trang web<br />
function getSilverlightObject()<br />
{<br />
var pluginObject = $find(""); //Xaml1 chính là ID của đối tượng Silverlight được nhúng vào<br />
var plugin = pluginObject.get_element();</p>
<p>return plugin</p>
<p>}<br />
</code><br />
<strong>4.2.	Đăng ký phương thức được phép gọi từ JavaScript</strong><br />
Giờ muốn sử dụng function nào trong đối tượng Silverlight thì ta phải đánh dấu đối tượng đó là [ScriptType] còn function được sử dụng là [ScriptMember], ví dụ ở đây ta muốn sử dụng function setSourceVideo() của đối tượng Page<br />
<code>[ScriptableType]<br />
public partial class Page : UserControl<br />
{<br />
[ScriptableMember]<br />
public void setSourceVideo(string url)<br />
{<br />
mePlayer.Source = new Uri(url, UriKind. RelativeOrAbsolute);<br />
}<br />
}<br />
</code><br />
Trong mã JavaScript, muốn set lại source video ta chỉ cần gọi function setSouceVideo(string url) và truyền link video vào<br />
<code>function loadSource()<br />
{<br />
var pluginObject = $find("");<br />
var plugin = pluginObject.get_element();<br />
var url = “TestVideo.wmv”;<br />
plugin.Content.mediaPlayer.setSourceVideo(url);<br />
}<br />
</code><br />
Xong, tương tự bạn có thể tự viết các JavaScript API như Play, Pause, Replay, Mute…</p>
<p><strong>5.	VisualStateManager</strong><br />
Trong project cũ viết trên Silverlight 2 beta 2 tôi có làm cả cái VisualStateManager thêm một số hiệu ứng di chuyển cho đẹp, nhưng khi update lên Silverlight 2 thì có nhiều thay đổi ở việc quản lý cái VisualState này nên tôi phải xóa hết đi, thế cũng tốt, đỡ rối mắt cho những người mới học, với ai muốn sourcecode của project có cả visual state này cho Silverlight 2 thì email cho tôi minh.hl86@gmail.com<br />
Ở entry sau, tôi sẽ trình bày cách để đưa được một ứng dụng Silverlight 2 lên web và nhúng vào blog hay đâu đó và cả cách để treaming một video sử dụng dịch vụ miễn phí của Microsoft dành cho các nhà phát triển Silverlight <a href="http://silverlight.live.com">http://silverlight.live.com</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hoangleminh.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hoangleminh.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hoangleminh.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hoangleminh.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hoangleminh.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hoangleminh.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hoangleminh.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hoangleminh.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hoangleminh.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hoangleminh.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hoangleminh.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hoangleminh.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hoangleminh.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hoangleminh.wordpress.com/31/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoangleminh.wordpress.com&amp;blog=4997870&amp;post=31&amp;subd=hoangleminh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hoangleminh.wordpress.com/2008/11/10/t%e1%ba%a1o-media-player-trong-silverlight/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5ae5319110fcc1d03550a74fca17948b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hoangleminh</media:title>
		</media:content>

		<media:content url="http://www.hoangleminh.com/images/MediaPlayer.png" medium="image">
			<media:title type="html">Media Player</media:title>
		</media:content>
	</item>
		<item>
		<title>Lỗi Key Enter event của ASP.NET trên IE Browser với form có một textbox</title>
		<link>http://hoangleminh.wordpress.com/2008/10/29/l%e1%bb%97i-key-enter-event-c%e1%bb%a7a-aspnet-tren-ie-browser-v%e1%bb%9bi-form-co-m%e1%bb%99t-textbox/</link>
		<comments>http://hoangleminh.wordpress.com/2008/10/29/l%e1%bb%97i-key-enter-event-c%e1%bb%a7a-aspnet-tren-ie-browser-v%e1%bb%9bi-form-co-m%e1%bb%99t-textbox/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 05:03:17 +0000</pubDate>
		<dc:creator>hoangleminh</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Enter event]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://hoangleminh.wordpress.com/?p=26</guid>
		<description><![CDATA[Vừa deploy xong cái Social Graph dùng Javascript, đang rỗi việc lại nhớ đến blog lâu không viết gì, chợt nảy ra ý tưởng sẽ viết các entry về các vấn đề mà tôi đã gặp phải khi làm ở Vườn chim 2.0 và cách giải quyết, sau một thời gian sẽ có một danh [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoangleminh.wordpress.com&amp;blog=4997870&amp;post=26&amp;subd=hoangleminh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h3><!--[if gte mso 9]&gt;  Normal 0     false false false  EN-US X-NONE X-NONE              MicrosoftInternetExplorer4              &lt;![endif]--><!--[if gte mso 9]&gt;                                                                                                                                            &lt;![endif]--><!--  /* Font Definitions */  @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073750139 0 0 159 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0in; 	margin-right:0in; 	margin-bottom:10.0pt; 	margin-left:0in; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-fareast-font-family:Calibri; 	mso-bidi-font-family:"Times New Roman";} code 	{mso-style-noshow:yes; 	mso-style-priority:99; 	font-family:"Courier New"; 	mso-ascii-font-family:"Courier New"; 	mso-fareast-font-family:"Times New Roman"; 	mso-hansi-font-family:"Courier New"; 	mso-bidi-font-family:"Courier New";} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	font-size:10.0pt; 	mso-ansi-font-size:10.0pt; 	mso-bidi-font-size:10.0pt; 	mso-ascii-font-family:Calibri; 	mso-fareast-font-family:Calibri; 	mso-hansi-font-family:Calibri;} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.0in 1.0in 1.0in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --><!--[if gte mso 10]&gt; &lt;!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0in 5.4pt 0in 5.4pt; 	mso-para-margin:0in; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} --> <!--[endif]--></h3>
<h3 class="MsoNormal"><span style="font-family:&quot;">V</span><span style="font-family:&quot;" lang="VI">ừa</span><span style="font-family:&quot;"> deploy xong cái Social Graph dùng Javascript, đang rỗi việc lại nhớ đến blog lâu không viết gì, chợt nảy ra ý tưởng sẽ viết các entry về các vấn đề mà tôi đã gặp phải khi làm ở Vườn chim 2.0 và cách giải quyết, sau một thời gian sẽ có một danh sách dài các lỗi giời ơi đất hỡi, vừa giúp mình ghi nhớ, lại giúp cho những ai gặp phải những lỗi này có thể tham khảo cách giải quyết, cũng hay</span></h3>
<h3 class="MsoNormal"><span style="font-family:&quot;">Hôm nay sẽ bắt đầu với cái lỗi gặp phải khi tạo một form sử dụng ASP.NET, không fire ra event Key Enter trên Internet Explorer (cả IE6 và IE7, .NET Framework 1.0 hay 2.0 đều dính, chưa test trên 3.5)</span></h3>
<h3 class="MsoNormal"><span style="font-family:&quot;">Từ trước đến giờ thì việc submit một form trong ASP.NET là cực kỳ đơn giản rồi, nhập data xong Enter một phát là xong (ông nào thích chuột thì click lên button submit), mọi việc vẫn diễn ra nhưng kiểu đương nhiên nó phải thế, cho đến một hôm tôi phải tạo một cái form chỉ có 1 textbox và 1 button (làm cái form search ý mà), nhấn Enter xong, form vẫn submit nhưng event btnSubmit click thì chẳng thấy đâu (trêm IE thôi nhé, Firefox hay Opera hay là Chrome vẫn ngon). Search trên mạng thì cũng thấy nhiều chú dính, từ năm 2003 cũng có, cho đến 2008 vẫn có chú hỏi.</span></h3>
<h3 class="MsoNormal"><span style="font-family:&quot;"><strong>Nguyên nhân:</strong> thằng IE dở hơi khi form được submit đi có hơn 1 textbox thì HTTP_POST của nó thế này (or something like that)</span></h3>
<h3 class="MsoNormal"><code><span style="font-size:10pt;line-height:115%;">TextBox1=<em>Value1</em>&amp;TextBox2=<em>Value2</em>&amp;...&amp;TextBoxN=<em>ValueN</em>&amp;btnSubmit=Click Me!</span></code></h3>
<h3 class="MsoNormal"><code><span style="line-height:115%;font-family:&quot;">Nhưng nếu chỉ có 1 textbox thì nó lại không submit đi btnSubmit=ClickMe!, chỉ còn thế này</span></code></h3>
<h3 class="MsoNormal"><code><span style="font-size:10pt;line-height:115%;">TextBox1=<em>Value1</em></span></code></h3>
<h3 class="MsoNormal"><code><span style="line-height:115%;font-family:&quot;">Thế nên nó không fire ra cái event btnSubmit click</span></code></h3>
<h3 class="MsoNormal"><code><span style="line-height:115%;font-family:&quot;"><strong>Giải quyết: </strong></span></code></h3>
<h3 class="MsoNormal"><code><span style="line-height:115%;font-family:&quot;">Đơn giản chỉ<span> </span>là lừa nó, thêm vào một textbox và hidden nó đi, kiểu như này:</span></code></h3>
<h3 class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;"><em><span style="font-size:10pt;font-family:&quot;">&lt;asp:TextBox runat=&#8221;server&#8221; <strong>style=&#8221;visibility:hidden;display:none;&#8221;</strong> /&gt;</span></em></h3>
<h3 class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;"><span style="font-size:10pt;font-family:&quot;"> </span></h3>
<h3 class="MsoNormal"><code><span style="line-height:115%;font-family:&quot;">Một lỗi hết sức vớ vẩn nhưng cứ post lên, hi vọng giúp được ai đó</span></code></h3>
<h3 class="MsoNormal"><code><span style="line-height:115%;font-family:&quot;"><strong>Nguồn tham khảo:</strong> <a href="http://www.aspdotnetfaq.com/Faq/Why-Button-Click-event-handler-code-is-not-executed-when-Enter-key-is-pressed-on-ASP-NET-Form.aspx">http://www.aspdotnetfaq.com/Faq/Why-Button-Click-event-handler-code-is-not-executed-when-Enter-key-is-pressed-on-ASP-NET-Form.aspx</a></span></code><code></code></h3>
<h3 class="MsoNormal"><code><span style="line-height:115%;font-family:&quot;">Còn khá nhiều lỗi vớ vẩn khác đã gặp phải, hi vọng sẽ có thời gian để post tiếp <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</span></code></h3>
<h3 class="MsoNormal"><code><span style="line-height:115%;font-family:&quot;"> </span></code></h3>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hoangleminh.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hoangleminh.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hoangleminh.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hoangleminh.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hoangleminh.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hoangleminh.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hoangleminh.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hoangleminh.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hoangleminh.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hoangleminh.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hoangleminh.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hoangleminh.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hoangleminh.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hoangleminh.wordpress.com/26/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoangleminh.wordpress.com&amp;blog=4997870&amp;post=26&amp;subd=hoangleminh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hoangleminh.wordpress.com/2008/10/29/l%e1%bb%97i-key-enter-event-c%e1%bb%a7a-aspnet-tren-ie-browser-v%e1%bb%9bi-form-co-m%e1%bb%99t-textbox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5ae5319110fcc1d03550a74fca17948b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hoangleminh</media:title>
		</media:content>
	</item>
		<item>
		<title>Phủ Lý city du hý nào!</title>
		<link>http://hoangleminh.wordpress.com/2008/10/21/ph%e1%bb%a7-ly-city-du-hy-nao/</link>
		<comments>http://hoangleminh.wordpress.com/2008/10/21/ph%e1%bb%a7-ly-city-du-hy-nao/#comments</comments>
		<pubDate>Tue, 21 Oct 2008 15:43:10 +0000</pubDate>
		<dc:creator>hoangleminh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://hoangleminh.wordpress.com/?p=23</guid>
		<description><![CDATA[Như đã rào đón một thời gian trước thì hôm nay xin chính thức thông báo là 3/11 tớ sẽ có một bà chị dâu. Để chào đón ngày trọng đại này, hôm nay &#8211; sau hơn nửa năm gác bút -  tớ viết cái entry nhắm lôi kéo các bạn về quê chơi cho [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoangleminh.wordpress.com&amp;blog=4997870&amp;post=23&amp;subd=hoangleminh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h3>Như đã rào đón một thời gian trước thì hôm nay xin chính thức thông báo là 3/11 tớ sẽ có một bà chị dâu. Để chào đón ngày trọng đại này, hôm nay &#8211; sau hơn nửa năm gác bút -  tớ viết cái entry nhắm lôi kéo các bạn về quê chơi cho vui, trước là mừng ngày vui của anh trai tớ, sau là cũng có dịp bạn bè lâu ngay gặp nhau, từ hồi đi làm đến giờ chẳng mấy khi có thời gian tụ tập đàn đúm</h3>
<h3>Với mục đích như trên thì tớ xin tạm phác ra đây kế hoạch ăn chơi nhảy múa ở Phủ Lý city</h3>
<h3>- Chiều thứ 7 (1/11) làm việc xong hẹn mọi người ở 15h ở cổng trường mình (địa điểm có thể xê dịch cho tiện, nhưng chắc cổng trường mình là tiện nhất), rồi phóng xe máy về nhà tớ (có 60km thôi, chậm thì mất 2 tiếng, tớ toàn đi tiếng rưỡi)</h3>
<h3>- Về nhà tớ chơi biết nhà +dọn dẹp (hehe) + &#8230; , rồi sau đó khả năng ra ngoài thuê nhà nghỉ cho sướng (nhà có các bác về), sẽ tài trợ một nửa chi phí ở (chắc là không nhiều lắm <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ) ). Tối sẽ đi lượn vài vòng Phủ Lý rồi đáp ở đâu thì tùy</h3>
<h3>- Sáng hôm sau dẫn đi ăn bánh cuốn chả đặc sản Phủ lý, đảm bảo ngon đừng hỏi, cho các chú thưởng ngoạn một vòng nữa rồi trưa về đánh chén</h3>
<h3>Phác qua qua thế vậy, ai có ý kiến gì vào comment nhé. Vì du hí vào cuối tuần nên mọi người cố gắng đi đông đủ nhé</h3>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hoangleminh.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hoangleminh.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hoangleminh.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hoangleminh.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hoangleminh.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hoangleminh.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hoangleminh.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hoangleminh.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hoangleminh.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hoangleminh.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hoangleminh.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hoangleminh.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hoangleminh.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hoangleminh.wordpress.com/23/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoangleminh.wordpress.com&amp;blog=4997870&amp;post=23&amp;subd=hoangleminh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hoangleminh.wordpress.com/2008/10/21/ph%e1%bb%a7-ly-city-du-hy-nao/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5ae5319110fcc1d03550a74fca17948b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hoangleminh</media:title>
		</media:content>
	</item>
		<item>
		<title>Silverlight 2 Release Candidate</title>
		<link>http://hoangleminh.wordpress.com/2008/10/07/14/</link>
		<comments>http://hoangleminh.wordpress.com/2008/10/07/14/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 09:47:21 +0000</pubDate>
		<dc:creator>hoangleminh</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Release Candidate]]></category>

		<guid isPermaLink="false">http://hoangleminh.wordpress.com/?p=14</guid>
		<description><![CDATA[Mấy tuần nay bận làm cái WebProxy nên không cập nhật thông tin về Silverlight, hôm nay vào thấy thông báo Silverlight đã ra bản Release Candidate 0 từ hôm 25/9, thấy phấn chấn hẳn vì nghĩ là những bug từ bản beta2 mà dân tình than phiền suốt ngày sẽ được fix, nhưng đọc [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoangleminh.wordpress.com&amp;blog=4997870&amp;post=14&amp;subd=hoangleminh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Mấy tuần nay bận làm cái WebProxy nên không cập nhật thông tin về Silverlight, hôm nay vào thấy thông báo Silverlight đã ra bản Release Candidate 0 từ hôm 25/9, thấy phấn chấn hẳn vì nghĩ là những bug từ bản beta2 mà dân tình than phiền suốt ngày sẽ được fix, nhưng đọc kỹ thì thấy cũng không có thay đổi nhiều, bug vẫn hoàn bug</p>
<p>Bản Silverlight RC0 này hiện tại chỉ dành cho Developer, chưa có bộ runtime dành cho End-User, nhóm phát triển của Microsoft tung ra bản này nhằm mục đích để cho các Dev có thời gian để nâng cấp project của mình từ beta1, beta2 lên RC0, để sắp tới Microsoft tung ra bộ cài Silverlight release là vừa. Như vậy là hiện tại các project build trên môi trường RC0 chưa thể deploy đến cho các end-user (làm gì đã có Runtime mà chạy)<br />
Tham khảo thêm <a href="http://timheuer.com/blog/archive/2008/09/25/silveright-rc0-released-for-developers.aspx">http://timheuer.com/blog/archive/2008/09/25/silveright-rc0-released-for-developers.aspx</a></p>
<p>Một số cải tiến nổi bật ở Silverlight RC0:<br />
- Thêm 3 Controls mới:</p>
<ul>
<li> <strong>PasswordBox</strong>: Hồi trước có thấy một ứng dụng bán hoa bằng Silverlight, phần đăng ký ô Password nhập vào ghi nguyên text, nhìn thương vật, giờ có cái này tốt rồi, có thể tạo Form Login ngon lành rồi</li>
<li> <strong>ProgressBar</strong>: cái này cũng quan trọng, viết ứng dụng upload khoai nhất khoản này, event UploadPrgressChanged của Class WebClient không fire, chả biết làm thế nào. Chưa Test nhưng đọc trên Forum của Silverlight.net thấy nói bản RC0 này vẫn chưa fix bug này</li>
<li> <strong>ComboBox</strong>: Cái này ra thì tốt nhưng cũng không mong đợi lắm vì dùng tạm cái ListBox cũng okie</li>
</ul>
<p>- Hỗ trợ MessageBox.Show(): cái này hay, dễ kiểm soát giá trị khi code, trước muốn show ra value của đối tượng nào toàn phải kéo cái TextBlock vào<br />
- Thêm một số Control hỗ trợ Skin: cái này nhìn mấy cái image minh họa thấy cũng chả khác mấy nên ko quan tâm, với cả cái này dành cho bọn designer nhiều hơn</p>
<p>Tham khảo thêm <a href="http://weblogs.asp.net/scottgu/archive/2008/09/25/silverlight-2-release-candidate-now-available.aspx">http://weblogs.asp.net/scottgu/archive/2008/09/25/silverlight-2-release-candidate-now-available.aspx</a> </p>
<p>Còn một số &#8216;cải tiến&#8217; nữa, nhưng chủ yếu là ở nhân bên trong như chuyển namespace hay kế thừa, bản chi tiết những thay đổi tôi up luôn đây để tiện cho tra cứu (dành cho người lười download bản doc về), cái này sẽ giúp ích cho những ai cần upgrade từ beta2 lên RC0, làm sao để project viết trên beta2 chạy ngon trên RC0 để mấy nữa Microsoft ra bản Release là vừa</p>
<p>Có một chú ý là enduser sẽ không được tự động nâng cấp lên phiên bản Silverlight Runtime mới khi cái này được release, trình duyệt sẽ chỉ notify người dùng nâng cấp lên thôi</p>
<p>Toàn bộ phần thay đổi của beta2 và RC0 được ghi bên dưới hoặc download <a href="http://download.microsoft.com/download/6/F/E/6FE1F43D-9D0C-4346-AD08-602DF9BCB3CF/BreakingChangesBetweenBeta2andRelease.doc">tại đây</a><br />
<span id="more-14"></span><strong>Breaking Changes Since Beta 2</strong><br />
This topic discusses the changes made to the Silverlight runtime and Silverlight tools between the Microsoft Silverlight 2 Beta 2 and the final release of Silverlight 2. The changes discussed in this article are focused on changes that might cause your older Silverlight-based applications to now fail or behave differently, not on new features/enhancements for this release.<br />
Note   Corrections/Additions to this document (if any) are listed here.<br />
Note   Applications built with Beta 2 will not run on final runtime builds. End users will see a message informing them that the application was built with an obsolete version of Silverlight. You must rebuild your Beta 2 applications – see here for more information.<br />
Tip   Given the large number of API changes, particularly those listed in the Miscellaneous API Changes section, you may want to search this document by using CTRL+F.</p>
<p>Contents:<br />
•	Important! Migrating Older Code to the Newer Release<br />
•	ContentPresenter now derives from FrameworkElement instead of Control<br />
•	Layout Rendering Slightly Changed<br />
•	Cross domain hosts of Silverlight must set the right MIME type for XAP (application/x-silverlight-app)<br />
•	Exceptions now thrown in HttpWebRequest.EndGetResponse()<br />
•	Font URI is Restricted to Assembly Resource<br />
•	Browser.HtmlElementCollection replaced with by Browser.ScriptObjectCollection<br />
•	Exceptions When Changing Some Properties on an Active Animation<br />
•	System.Windows.Controls.Extended.dll renamed to System.Windows.Controls.dll<br />
•	VisualStateManager Changes<br />
•	KeyDown Sent Synchronously<br />
•	MeasureOverride/ArrangeOverride on Canvas Now Sealed<br />
•	UriTypeConverter moved to System.dll<br />
•	HtmlPage.UnregisterScriptableObject Removed<br />
•	RenderingEventArgs Changes<br />
•	ContentPresenter and ContentControl Changes<br />
•	Removal of FileDialogFileInfo Type and OpenFileDialog.SelectedFile(s) Properties<br />
•	Removal of FullAccess Option on the ExternalCallersFromCrossDomain attribute in the Silverlight 2 application manifest<br />
•	KeyFrameCollection Changes<br />
•	Request stream must be closed before calling HttpWebRequest.BeginGetResponse()<br />
•	HtmlWindow references on Safari/Mac will no longer evaluate to true<br />
•	Address property removed from all WebClient EventArg classes<br />
•	Constructors Made Internal<br />
•	Exception type change for System.Xml exception type<br />
•	Cannot create classes in XAML that do not have accessible constructors<br />
•	Get AG_E_UNKNOWN_ERROR in Silverlight 2 but not in Silverlight 1<br />
•	Platform looks for generic.xaml as a resource at themes/generic.xaml<br />
•	HTTP Polling Duplex OM Changes and Reengineering<br />
•	Breaking change to Silverlight native hosting IXcpControl COM interface<br />
•	Content-Type is allowed on cross domain request by default<br />
•	Enforcing delegate type check when two delegate objects are combined<br />
•	Miscellaneous API Changes</p>
<p>Important! Migrating Older Code to the Newer Release<br />
If you are migrating Silverlight applications that were created for the Silverlight 2 Beta 2 release or earlier to the final release of Silverlight 2, you are going to need to get the newest Silverlight 2 Tools for Visual Studio 2008 and recompile your project(s).<br />
1.	Get the newest version of Silverlight 2 Tools for Visual Studio 2008. You can get these tools from the SDK or online at Getting Started. You may have to uninstall any old tools before doing this install.<br />
2.	Open your old project (e.g. .csproj file). A dialog will come up notifying you that your project was created with an older version of Silverlight tools and asks you if you want to upgrade your project. Click the Yes button.<br />
3.	Open all of the HTML files and change:<br />
•	The Silverlight MIME type from application/x-silverlight-2-b1 or application/x-silverlight-2-b2 to application/x-silverlight-2.<br />
•	The Silverlight installation URL from http://go.microsoft.com/fwlink/?LinkID=108182 or http://go.microsoft.com/fwlink/?LinkID=115261 to http://go.microsoft.com/fwlink/?LinkID=124807.<br />
Note: some templates replaced http://go with http://go2. Be sure to search for both.<br />
4.	Debug. Many of the breaking changes you are likely to encounter can be found in this document.</p>
<p>ContentPresenter now derives from FrameworkElement instead of Control<br />
Who Is Affected: Applications that use ContentPresenter or objects derived from ContentPresenter.<br />
Summary<br />
Because ContentPresenter now derives from FrameworkElement, the following properties are no longer exposed by ContentPresenter:<br />
•	Background<br />
•	BorderBrush<br />
•	BorderThickness<br />
•	DefaultStyleKey<br />
•	FontFamily<br />
•	FontSize<br />
•	FontStretch<br />
•	FontStyle<br />
•	FontWeight<br />
•	Foreground<br />
•	HorizontalContentAlignment<br />
•	IsEnabled<br />
•	IsTabStop<br />
•	Padding<br />
•	TabIndex<br />
•	TabNavigation<br />
•	Template<br />
•	VerticalContentAlignment</p>
<p>In addition, some APIs were removed from ContentPresenter (see ContentPresenter and ContentControl Changes).</p>
<p>Fix Required<br />
Remove all these obsolete properties from your ContentPresenter objects, which will likely require you to re-work some of your code to restore your previous UI rendering.</p>
<p>Layout Rendering Slightly Changed<br />
Who Is Affected: All content using layout might be rendered slightly differently because layout no longer causes elements to be rendered at sub-pixel locations.</p>
<p>Summary<br />
The layout system in Silverlight has been modified to round final measure and arrange values to integers when placing elements on the screen (“pixel snapping”). The result is crisper lines, more consistent rendering look, and fewer rendering artifacts.</p>
<p>Layout rounding will be *on* by default, but there is a new inherited property on UIElement called UseLayoutRounding that can be set to false if the old layout behavior is desired.</p>
<p>Note   It is possible that this change will affect how your animations render, in which case you might want to set UseLayoutRounding to false.<br />
Note   This change does not affect transforms. If you apply a transform to an element, it may still be rendered at a sub-pixel location.</p>
<p>Cross domain hosts of Silverlight must set the right MIME type for XAP (application/x-silverlight-app)<br />
Who Is Affected: Anyone serving Silverlight 2 apps from cross domain:<br />
•	Via a web server that is not IIS7<br />
•	Via a web server where the MIME type for .XAP files is incorrectly configured<br />
Summary/Fix Required<br />
When the XAP is served from a different domain than the host HTML page, Silverlight will validate that the MIME type (Content-Type response header) returned on the HTTP response is application/x-silverlight-app.</p>
<p>Apache (and perhaps other servers) tend to serve unrecognized content as text/plain, and therefore will be affected by this change. You are required to add an entry for the Silverlight XAP MIME type to your .htaccess file &#8212; e.g. AddType application/x-silverlight-app xap.</p>
<p>Note   IIS7 shipped with the right MIME type configurations for Silverlight XAPs. No action is required if you are using IIS7.<br />
Exceptions now thrown in HttpWebRequest.EndGetResponse()<br />
Who Is Affected:  Silverlight 2 applications that use HttpWebRequest.<br />
Summary/Fix Required<br />
For HttpWebRequest:<br />
Before:<br />
•	Some security exceptions (e.g. cross-scheme violations) were being raised in HttpWebRequest.BeingGetResponse()<br />
•	All other request error conditions were being returned as 404s.</p>
<p>Now:<br />
•	Error conditions are now raised as exceptions in HttpRequest.EndGetResponse().<br />
•	Request security errors (e.g. requests not allowed by cross domain policy) raise SecurityExceptions<br />
•	Non-successful requests (e.g. those that returned 404s) raise WebExceptions. The WebException.Response is set to HttpStatusCode.NotFound. This is compatible with the desktop.<br />
Font URI is Restricted to Assembly Resource<br />
Who Is Affected: Silverlight 2 Beta1 or Beta 2 applications (not Silverlight 1.0 applications) that reference fonts (or zip of fonts) via the URI syntax in the Control.FontFamily, TextBlock.FontFamily or Glyphs.FontUri attributes and where the fonts are not embedded within the assembly (dll) of the control or application.<br />
Fix Required<br />
You can specify a font (or in some cases a zip of fonts) in URI format via the Control.FontFamily, TextBlock.FontFamily and the Glyphs.FontUri attributes. If you are, you will need to ensure your font is marked as a &#8220;resource&#8221; in the project system.<br />
Browser.HtmlElementCollection replaced with by Browser.ScriptObjectCollection<br />
Who Is Affected: Silvlierlight 2 Beta 2 applications using HTML bridge’s HtmlElementCollection will break.  The type has been replaced with a new type:  ScriptObjectCollection.<br />
Summary<br />
The System.Windows.Browser.HtmlElementCollection type was changed to ScriptObjectCollection.  All previous references to HtmlElement on the collection have been changed to instead reference ScriptObject.  Other areas of the HTML bridge that previously used HtmlElementCollection (i.e. HtmlElement.Children) have been switched to instead return a ScriptObjectCollection.  Note that if you retrieve an item from the new ScriptObjectCollection that actually is an HtmlElement, you can still cast the return value back to an HtmlElement.<br />
The specific benefit from this change is that across all browsers you can now access both element, and non-element, DOM nodes contained in a node collection.  We made this change because there is no consistent cross-browser implementation of an HtmlElement-specific collection type.<br />
Fix Required<br />
Change existing references to HtmlElementCollection to ScriptObjectCollection.  If your existing code was working with HtmlElement return values you will need to explicitly cast the items returned from a ScriptObjectCollection to an HtmlElement.  Since the collection type is now ScriptObjectCollection it is likely that on different browsers the ordinality of the resulting collection will also change.  Any code that was relying on fixed offsets into the collection may need to be changed to account for non-element nodes (e.g. text nodes such as whitespace, etc…) in the collection.<br />
Beta 2<br />
[c#]<br />
HtmlElement myHtmlElement = someOtherHtmlElement.Children[5];</p>
<p>Release<br />
[c#]<br />
HtmlElement myHtmlElement = (HtmlElement)someOtherHtmlElement.Children[5]; //assuming the desired element is still at offset 5</p>
<p>Exceptions When Changing Some Properties on an Active Animation<br />
Who Is Affected: Silverlight 1.0 and 2.0 applications that change properties on active animations.<br />
Summary<br />
When you change one of the properties listed below on an active Storyboard, an exception is raised at runtime with this message: “Operation is not valid on an active Animation or Storyboard. Root Storyboard must be stopped first.&#8221;<br />
The list of properties that cannot be modified on an active animation or Storyboard are listed below:<br />
Attached Properties<br />
•	Storyboard.TargetNameProperty<br />
•	Storyboard.TargetPropertyProperty<br />
Properties on derived classes from Timeline of a collection type<br />
•	Storyboard.Children (you cannot add/remove animations from an active storyboard)<br />
•	ColorAnimationUsingKeyFrames.KeyFrames<br />
•	DoubleAnimationUsingKeyFrames.KeyFrames<br />
•	PointAnimationUsingKeyFrames.KeyFrames<br />
•	ObjectAnimationUsingKeyFrames.KeyFrames<br />
Make sure you stop the Storyboard before changing one of these properties. You can do this by using the Storyboard.Stop method.<br />
System.Windows.Controls.Extended.dll renamed to System.Windows.Controls.dll<br />
Who Is Affected: Anyone who uses the extended controls (Calendar, DatePicker, TabControl and GridSplitter).<br />
Fix Required<br />
Change all references from System.Controls.Extended to System.Windows.Controls and recompile your application.<br />
VisualStateManager Changes<br />
Who Is Affected: Silverlight 2 applications that use VisualStateManager.<br />
Summary<br />
VisualTransition.Duration has changed to VisualTransition.GeneratedDuration. This value will now only affect the generated transitions, and not the VisualTransition.Storyboard.</p>
<p>Example:<br />
In the below XAML, the VSM generated animations for the Pressed-&gt; Normal transition will be created with 1 second durations. The explicit transition Storyboard with its blue ColorAnimation will still be 2 seconds.<br />
[xaml]</p>
<p>&#8230;</p>
<p>&#8230;</p>
<p>VisualStateManager.CustomVisualStateManager should be set on the root visual of the ControlTemplate or UserControl, not the Control/UserControl itself. In the example below, the custom visual state manager is set on the Grid, the ControlTemplate’s root visual.<br />
[xaml]</p>
<p>&#8230;</p>
<p>KeyDown Sent Synchronously<br />
Who Is Affected: If you previously have been doing operations in the KeyDown event that could cause reentrancy into the Silverlight control, such as calling into the HtmlPage.Window.Alert function, this will no longer be supported.<br />
Summary<br />
We switched over our keyboard handling for character input to use the concept of the WM_CHAR windows message. This is used for TextBox/PasswordBox text entry to enable scenarios such as entering AltGr keystrokes. In order for us to do this, the KeyDown event had to be sent synchronously for managed code.</p>
<p>MeasureOverride/ArrangeOverride on Canvas Now Sealed<br />
Who Is Affected: Silverlight 2 Beta 2 Applications that use MeasureOverride and ArrangeOverride on Canvas.<br />
Summary<br />
MeasureOverride and ArrangeOverride virtual methods on Canvas are sealed. These methods were already sealed for Grid and StackPanel. Any custom panel that requires its own layout logic should subclass Panel.<br />
UriTypeConverter moved to System.dll<br />
Who Is Affected: Silverlight 2 managed code referencing the UriTypeConverter class.<br />
Fix Required<br />
UriTypeConverter was moved from System.Windows.Controls.dll to System.dll where it resides on the desktop framework. Applications that reference it just need to be recompiled.<br />
HtmlPage.UnregisterScriptableObject Removed<br />
Who Is Affected: Those using HtmlPage.UnregisterScriptableObject.<br />
Fix Required<br />
Alternative to using HtmlPage.UnregisterScriptableObject, developers can now re-use the same script registration key for RegisterScriptableObject.  This allows developers to change the underlying managed object associated with a scriptable entry point.<br />
RenderingEventArgs Changes<br />
Who Is Affected: Silverlight 2 managed code referencing the RenderingEventArgs class.<br />
Summary<br />
The following changes have been made to class RenderingEventArgs<br />
•	RenderingEventArgs is moved from System.Windows to System.Windows.Media<br />
•	RenderingEventArgs.ctor() is now internal<br />
•	System.Windows.RenderingEventHandler has been removed.<br />
ContentPresenter and ContentControl Changes<br />
Who Is Affected: Silverlight 2 managed code that uses either the ContentPresenter or ContentControl classes.<br />
Summary<br />
The following properties were removed from ContentPresenter and ContentControl.<br />
•	TextAlignment<br />
•	TextDecorations<br />
•	TextWrapping<br />
Removal of FileDialogFileInfo Type and OpenFileDialog.SelectedFile(s) Properties<br />
Who Is Affected: Silverlight 2 applications which use the OpenFileDialog.<br />
Summary<br />
•	The System.Windows.FileDialogFileInfo type is being removed. Its functionality is now being exposed via its base System.IO.FileInfo type to transparent code within Silverlight’s sandbox.<br />
•	System.Windows.Controls.OpenFileDialog has a couple properties which consume and expose FileDialogFileInfo. They were modified to return the FileInfo type.<br />
•	In addition, the property names SelectedFile and SelectedFiles were also changed to File and Files.</p>
<p>Fix Required<br />
Beta 2<br />
[c#]<br />
// Returns a File object for the selected file. If multiple files are selected, returns the first selected file<br />
public FileDialogFileInfo SelectedFile { get; }</p>
<p>// Returns a collection of File objects for the selected files<br />
public IEnumerable SelectedFiles { get; }</p>
<p>Release<br />
[c#]<br />
// Returns a File object for the selected file. If multiple files are<br />
// selected, returns the first selected file<br />
public FileInfo File { get; }</p>
<p>// Returns a collection of File objects for the selected files<br />
public IEnumerable Files { get; }</p>
<p>Sample usage of OpenFileDialog with this change:<br />
[c#]<br />
openFileDialog = new System.Windows.Controls.OpenFileDialog();<br />
openFileDialog.Multiselect = false;<br />
openFileDialog.Filter = &#8220;Text Files (*.txt)|*.txt|All files (*.*)|*.*&#8221;;</p>
<p>bool? retval = ofd.ShowDialog();<br />
if (retval != null &amp;&amp; retval == true) {</p>
<p>// Get the filename<br />
string filename = openFileDialog.File.Name;<br />
// Open the file<br />
System.IO.Stream filestream = openFileDialog.File.OpenRead();</p>
<p>// Do something with the filestream</p>
<p>// Close it<br />
}</p>
<p>Removal of FullAccess Option on the ExternalCallersFromCrossDomain attribute in the Silverlight 2 application manifest<br />
Who Is Affected: Only Silverlight 2 applications that use this combination of features:<br />
•	XAP deployed on a different domain than the host HTML page, and<br />
•	with application manifest (AppManifest.xaml) specifying ExternalCallersFromCrossDomain=”FullAccess” on the root element are affected.<br />
Summary<br />
The ability for arbitrary scripts to walk the element tree, register for and get notified on events, and use the Silverlight 1.0 Downloader from script has been curtailed in a cross-domain app deployment scenario. The application manifest previously supported the ability for app author to designate the ExternalCallersFromCrossDomain attribute with the values NoAccess (default in cross-domain), ScriptableOnly and FullAccess. Support for the FullAccess option has been removed.<br />
Many of the purposes you would have relied on the FullAccess option can now be fulfilled via the Scriptable object feature, with minor additional work on your part.</p>
<p>KeyFrameCollection Changes<br />
Summary and Fix<br />
Virtual methods Add, Contains, Indexof, Insert, Remove, get_Item, set_Item are no longer declared on the following collections:<br />
•	ColorKeyFrameCollection.<br />
•	DoubleKeyFrameCollection<br />
•	ObjectKeyFrameCollection<br />
•	PointKeyFrameCollection<br />
•	PointKeyFrameCollection<br />
•	StrokeCollection</p>
<p>Request stream must be closed before calling HttpWebRequest.BeginGetResponse()<br />
Who Is Affected: Silverlight 2 applications that use HttpWebRequest.BeginGetResponse().<br />
Summary<br />
You must close the request stream on an HttpWebRequest before calling BeginGetResponse(). Previously BeginGetResponse() would close an open request stream.</p>
<p>HtmlWindow references on Safari/Mac will no longer evaluate to true<br />
Who Is Affected: Code that uses System.Windows.Browser.HtmlWindow and that expects two HtmlWindow references pointing at the same DOM window to evaluate to true will now return false when running on Safari 2 or Safari 3 on Mac.<br />
Summary<br />
For example:<br />
•	Create a page with one iframe<br />
•	Use the bridge to get two references to the iframe:<br />
HtmlWindow myWin  = document.GetElementById(“myIframe”);<br />
HtmlWindow myWin2  = document.GetElementById(“myIframe”);<br />
•	With the change the following comparison will now return false on Safari 2/3 Mac:<br />
bool areEqual = (myWin == myWin2);</p>
<p>Address property removed from all WebClient EventArg classes<br />
Fix Needed<br />
If you were depending on the Address property, you can work around this breaking change in the following way:<br />
Beta 2<br />
[c#]<br />
void Callback(object sender, DownloadStringCompletedEventArgs args)<br />
{<br />
DebugPrint(args.Address.ToString());<br />
}</p>
<p>void MakeCall(Uri uri, object userState)<br />
{<br />
webClient.DownloadStringAsync(uri, userState);<br />
}</p>
<p>Release<br />
[c#]<br />
class DownloadState<br />
{<br />
public DownloadState() {}<br />
public Uri Address;<br />
public object ActualUserState;<br />
}</p>
<p>void Callback(object sender, DownloadStringCompletedEventArgs args)<br />
{<br />
DownloadState userState = (DownloadState)args.UserState;</p>
<p>DebugPrint(userState.Address.ToString());<br />
}</p>
<p>void MakeCall(Uri uri, object userState)<br />
{<br />
Uri absoluteUri = uri;<br />
if (absoluteUri.IsAbsoluteUri == false)<br />
{<br />
absoluteUri = new Uri(new Uri(webClient.BaseAddress), absoluteUri);<br />
}</p>
<p>DownloadState downloadState = new DownloadState();<br />
downloadState.Address = absoluteUri;<br />
downloadState.ActualUserState = userState;</p>
<p>webClient.DownloadStringAsync(uri, downloadState);<br />
}</p>
<p>Constructors Made Internal<br />
Summary<br />
You can no longer create the objects listed below because their associated constructors have been made internal:<br />
•	SizeChangedEventArgs<br />
•	TextChangedEventArgs<br />
•	DownloadProgressEventArgs<br />
•	ExceptionRoutedEventArgs<br />
•	KeyEventArgs<br />
•	MouseButtonEventArgs<br />
•	MouseEventArgs<br />
•	StartupEventArgs<br />
•	Expression<br />
•	GeneralTransform<br />
•	Geometry<br />
•	ImageSource<br />
•	PathSegment<br />
•	SetterBase<br />
•	Transform<br />
•	BindingExpressionBase<br />
•	InputMethod</p>
<p>Exception type change for System.Xml exception type<br />
Summary<br />
In the methods/constructors shown below, we will no longer be checking for null arguments. As a result, the usage of null arguments will result in a NullReferenceException. In previous builds of Silverlight, use of a null argument would result in an ArgumentNullException being thrown. There is no change in functionality, just the type of exception that is being thrown.<br />
•	XmlReader.IsName method<br />
•	XmlReader constructor<br />
•	XmlReader.MoveToAttribute method<br />
•	XmlReader:IsNameToken method<br />
•	XmlNamespaceManager constructor<br />
•	XmlReader.Nametable.Add method<br />
•	XmlReader.Nametable.Get method<br />
•	XmlCharCheckingWriter.WriteQualifiedName method<br />
•	XmlCharCheckingWriter.WriteDocType method<br />
•	XmlConvert.ToBoolean method<br />
•	XmlConvert.ToDouble method<br />
•	XmlConvert.ToSingle method<br />
•	XmlConvert.ToDateTime method</p>
<p>Cannot create classes in XAML that do not have accessible constructors<br />
Summary<br />
Certain classes that were defined by the Silverlight runtime were creatable in XAML, even though they did not have an accessible constructor.  With this change, you can no longer instantiate those classes in XAML.<br />
These classes (which only have internal constructors) can no longer be created in XAML:<br />
•	TriggerCollection<br />
•	InlineCollection<br />
•	RowDefinitionCollection<br />
•	ColumnDefinitionCollection<br />
•	RoutedEventARgs<br />
•	MouseButtonEventArgs<br />
•	KeyEventARgs<br />
•	ErrorEventArgs<br />
•	UIElementCollection<br />
•	Downloader<br />
•	InternalWebRequest<br />
•	MultiScaleSubImageCollection<br />
•	MediaAttribute<br />
•	MediaAttributeCollection<br />
•	ExceptionROutedEventArgs<br />
•	DownloadProgressEventArgs<br />
•	StartupEventArgs<br />
•	TextBoxBase<br />
•	TextBoxView<br />
•	TextChangedEventArgs<br />
•	RuntimeHostEventArgs<br />
•	SizeChangedEventArgs<br />
•	RenderingEventArgs<br />
•	ItemCollection<br />
•	CorePropertyChangedEventArgs<br />
•	IsEndabledChangedEventARgs<br />
•	TypeProxy<br />
•	ManagedObjectReference<br />
•	AutomationPropertiesEnum<br />
•	DependencyPropertyProxy</p>
<p>Get AG_E_UNKNOWN_ERROR in Silverlight 2 but not in Silverlight 1<br />
Summary<br />
In previous versions of Silverlight, when media failed because a media file was not available, a MediaFailed event was fired but if the MediaFailed event was not handled by the developer, the end user would not be notified of the failure. Now when a handler is not hooked up to the MediaFailed event, the error bubbles up to the default OnError handler of the plug-in and AG_E_UNKNOWN_ERROR is displayed to the user.<br />
Fix Required<br />
Attach the MediaFailed event to your MediaElement objects and handle errors as appropriate.</p>
<p>Platform looks for generic.xaml as a resource at themes/generic.xaml<br />
Summary<br />
The platform now looks for the generic.xaml resource dictionary as an assembly resource in the &#8220;themes&#8221; directory rather than the root directory.<br />
Fix Required<br />
Move your generic.xaml resource underneath the &#8220;themes&#8221; folder under ControlLib in Solutions Explorer in Visual Studio.</p>
<p>HTTP Polling Duplex OM Changes and Reengineering<br />
Who Is Affected: This will impact anyone using the HTTP Polling Duplex channel.<br />
Summary<br />
•	PollTimeout setting on the server side (PollingDuplexHttpBinding and PollingDuplexBindingElement) has been renamed to ServerPollTimeout<br />
•	PollTimeout setting on the PollingDuplexBindingElement (client side) has been renamed to ClientPollTimeout.<br />
•	PollTimeout setting on the PollingDuplexHttpBinding (client side) has been cut. In most scenarios, it should not be necessary to change this. If a change is necessary, it can be achieved through the ClientPollTimeout on the PollingDuplexBindingElement.<br />
•	Client-side support has been cut from the non-Silverlight (server-side) polling duplex assembly (i.e. BuildChannelFactory will throw a NotSupportedException). That is, in RTM, the client side for polling duplex must be Silverlight (and the server side must be the regular .NET Framework, but this restriction was already in place in Beta2).<br />
•	Default timeouts have been changed for the Duplex channel. For most common scenarios, the new out-of-the-box defaults should be appropriate and there is no need to change them.<br />
•	An error (404) on a polling request will cause the duplex channel to fault.<br />
•	Various invalid messages used to be ignored by the Duplex stack but will now be rejected.<br />
•	If any HTTP error (404,500,…) is encountered during a SOAP call, a CommunicationException is now thrown instead of a ProtocolException.</p>
<p>Breaking change to Silverlight native hosting IXcpControl COM interface<br />
Who Is Affected: Applications that host Silverlight 2 natively via its COM APIs.<br />
Summary<br />
•	The following splash screen related properties added to IXcpControl interface are being broken out and being moved to a new IXcpControl2 interface:<br />
•	get_OnSourceDownloadComplete<br />
•	get_OnSourceDownloadProgressChanged<br />
•	get_SplashScreenSource<br />
•	put_OnSourceDownloadComplete<br />
•	put_OnSourceDownloadProgressChanged<br />
•	put_SplashScreenSource</p>
<p>In addition, the LoadRuntime function is also being moved to IXcpControl2.</p>
<p>Content-Type is allowed on cross domain request by default<br />
Summary<br />
Both supported cross domain policy files (crossdomain.xml, clientaccesspolicy.xml) no longer need to explicitly allow the Content-Type request header.  The Content-Type header is always settable on POST xdomain requests, as long as the request itself is allowed by a cross domain policy file.<br />
In addition, the LoadRuntime function is also being moved to IXcpControl2.</p>
<p>Fix Required<br />
Previously you needed to specify Content-Type in the headers whitelist.  Now, Content-Type is always allowed, so the bolded “Content-Type” attribute value is no longer required just for setting the Content-Type (see below).<br />
clientaccesspolicy.xml<br />
Old version that explicitly listed Content-Type as settable.  (This file still works in SL2 RTM.)<br />
[xaml]</p>
<p>New version that still allows Content-Type to be set<br />
[xaml]</p>
<p>crossdomain.xml<br />
Old version that explicitly listed Content-Type as settable.  (This file still works in SL2 RTM.):<br />
[xaml]</p>
<p>New version that still allows Content-Type to be set:<br />
[xaml]</p>
<p>Enforcing delegate type check when two delegate objects are combined<br />
Who Is Affected: Code that bypass the delegate type check in Delegate.Combine by calling MulticastDelegate.CombineImpl directly.<br />
Fix Required<br />
If you want to combine two delegate objects they should be of the exact same delegate type.</p>
<p>Miscellaneous API Changes<br />
•	UIElement.HitTest method has moved to the VisualTreeHelper class and renamed to VisualTreeHelper.FindElementsInHostCoordinates.<br />
•	Moved DependencyPropertyChangedEventHandler delegate type from System.Windows.Controls to System.Windows namespace.<br />
•	Control.IsTabStop defaults to true. Now, all Control derived classes (directly or indirectly) have IsTabStop set to true except, UserControl, HyperlinkButton, ScrollViewer and ListBox.<br />
•	WebHeaderCollection.Keys property was replaced with the AllKeys property.<br />
•	WebHeaderCollection.Headers property was renamed to Keys.<br />
•	WebRequest.RegisterPrefix() now returns false in failure cases per the interface contract from the desktop framework rather than throwing an exception.<br />
•	WebResponse.Dispose(bool explicitDisposing) was removed.<br />
•	Deployment.PartProperty is now read only.<br />
•	Deployment.EntryPointAssemblyProperty is now read only.<br />
•	Deployment.EntryPointTypeProperty is now read only.<br />
•	Deployment.RuntimeVersionProperty is now read only.<br />
•	Deployment.ExternalCallersFromCrossDomainProperty is now read only.<br />
•	Thumb.IsDragging is now read only.<br />
•	Slider.IsFocused is now read only.<br />
•	ButtonBase.IsFocused is now read only.<br />
•	ButtonBase.IsMouseOver is now read only.<br />
•	ButtonBase.IsPressed is now read only.<br />
•	ToolTipService.GetToolTip is now private.<br />
•	IRawElementProviderSimple is now sealed and has a private default constructor.<br />
•	Setter.PropertyProperty is now internal. Please use the CLR property instead of the DependencyProperty.<br />
•	Slider.UpdateTrackLayout() is now internal.<br />
•	Slider.OnOrientationChanged() is now internal.<br />
•	Slider.OnIsFocusChanged(DependencyPropertyChangedEventArgs e) is now internal.<br />
•	ComboBox.get_IsSelectionActive() is now internal.<br />
•	ComboBox.ScrollIntoView(Int32 index) is now internal.<br />
•	ComboBox.get_SelectionBoxItemTemplate() now returns System.Windows.DataTemplate.<br />
•	PasswordBox.SelectionChanged is now private.<br />
•	MouseEventArgs.Handled was moved to MouseButtonEventArgs.<br />
•	RenderTargetBitmap was renamed to HostingRenderTargetBitmap and moved from System.Windows.Media.Imaging to namespace System.Windows.Interop.<br />
•	AutomationPeer constructor is now protected.<br />
•	TriggerActionCollection.Item now takes System.Windows.TriggerAction instead of System.Windows.Media.Animation.BeginStoryboard.<br />
•	TriggerCollection.Item now takes System.Windows.TriggerBase instead of System.Windows.EventTrigger.<br />
•	RoutedEventArgs.Source was renamed to OriginalSource and is now read-only.<br />
•	ITableItemProvider and ITableProvider are now derived from IGridItemProvider and IGridProvider.<br />
•	The KeyboardNavigation class is now internal.<br />
•	ColumnDefinitionCollection constructor was made internal.<br />
•	InlineCollection constructor was made internal.<br />
•	ItemCollection constructor was made internal.<br />
•	RowDefinitionCollection constructor was made internal.<br />
•	UIElementCollection constructor was made internal.<br />
•	TriggerCollection constructor was made internal.<br />
•	Listbox field ListBoxItem._itemsControl is now internal.<br />
•	Ink.Stroke constructor changed to ctor(System.Windows.Input.StylusPointCollection).<br />
•	CanConvertFrom(Type sourceType) changed its signature to CanConvertFrom(ITypeDescriptorContext context, Type sourceType).<br />
•	CanConvertTo(Type destinationType) changed its signature to CanConvertTo(ITypeDescriptorContext context, Type destinationType).<br />
•	ConvertFrom(object value) changed its signature to ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value).<br />
•	ConvertFromString(string text) now is ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) where value of type string.<br />
•	ConvertTo(object value, Type destinationType) changed its signature to ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType).<br />
•	ConvertToString(object value) now is ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) with destinationType of type string.<br />
•	ItemCollection constructor is no longer available so any code that tries to instantiate an ItemCollection directly will no longer compile. This class is supposed to be instantiated only within ItemsControl.<br />
•	ContentPresenter now derives from FrameworkElement instead of Control.<br />
•	Control.OnIsEnabledChanged was removed. Now use IsEnabledChanged for extended controls.<br />
•	DownloadProgressEventHandler was removed.<br />
•	The following converters were removed:<br />
•	TextDecorationCollectionConverter<br />
•	FontStretchConverter<br />
•	FontStyleConverter<br />
•	FontWeightConverter<br />
•	FontFamilyConverter</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hoangleminh.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hoangleminh.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hoangleminh.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hoangleminh.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hoangleminh.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hoangleminh.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hoangleminh.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hoangleminh.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hoangleminh.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hoangleminh.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hoangleminh.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hoangleminh.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hoangleminh.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hoangleminh.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoangleminh.wordpress.com&amp;blog=4997870&amp;post=14&amp;subd=hoangleminh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hoangleminh.wordpress.com/2008/10/07/14/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5ae5319110fcc1d03550a74fca17948b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hoangleminh</media:title>
		</media:content>
	</item>
		<item>
		<title>RIA – Tương lai của công nghệ Web</title>
		<link>http://hoangleminh.wordpress.com/2008/09/29/ria-%e2%80%93-t%c6%b0%c6%a1ng-lai-c%e1%bb%a7a-cong-ngh%e1%bb%87-web/</link>
		<comments>http://hoangleminh.wordpress.com/2008/09/29/ria-%e2%80%93-t%c6%b0%c6%a1ng-lai-c%e1%bb%a7a-cong-ngh%e1%bb%87-web/#comments</comments>
		<pubDate>Mon, 29 Sep 2008 15:28:36 +0000</pubDate>
		<dc:creator>hoangleminh</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://hoangleminh.wordpress.com/?p=4</guid>
		<description><![CDATA[Hoàng Lê Minh

Core Team - Vườn chim Visky<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoangleminh.wordpress.com&amp;blog=4997870&amp;post=4&amp;subd=hoangleminh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Các ứng dụng web mạnh cả về tính năng và giao diện người dùng được gọi với thuật ngữ RIA (Rich Internet Application, hay Rich Interactive Application với Microsoft).Hiện nay trên thị trường có ba đại gia đang tham cạnh trong nhau ở thị trường Web RIA là Adobe System với Flash/Flex, Microsoft với Silverlight và Sun với JavaFX, ở bài viết này sẽ chỉ đề cập đến Flex và Silverlight vì tính phổ biến và khả năng phát triển của nó trong tương lai</p>
<p class="MsoNormal"><strong>1 – Flex của Adobe</strong></p>
<p class="MsoNormal">Hiện nay thì Adobe đang là bá chủ trong lĩnh vực RIA với quá trình phát triển bền vững lâu dài từ Shockwave, Flash rồi đến Flex (và tương lai gần sẽ là AIR). Với việc 95% máy tính trên thế giới được cài Adobe Flash Player thì Adobe có lợi thế rất lớn để triển khai các ứng dụng trên nền Flash/Flex. Flash là công nghệ thể hiện nổi tiếng về khả năng xử lý đồ họa vector và ảnh động, cho phép tạo nội dung đa phương tiện tương tác với người dùng thông qua ActionScript. Flex dựa trên Flash, dùng ngôn ngữ khai báo MXML dựa trên XML kết hợp với ActionScript, cung cấp sự tách biệt giữa phần giao diện người dùng và phần luận lý ứng dụng rõ ràng hơn so Flash.</p>
<p class="MsoNormal">Để phát triển các ứng dụng Flex có 3 cách, đơn giản nhất là sử dụng Dreamweaver CS3 viết mã HTML và JavaScript kết hợp với AIR SDK. Cách 2 là cài một add-ons cho Flash CS3 và cách thứ 3 là sử dụng Flex Builder 3 làm môi trường phát triển. Nếu bạn là người quan tâm đến công nghệ Flex thì tôi khuyên bạn nên bắt đầu với Flex Builder 3 vì tính kéo thả trực quan và dễ học của nó.</p>
<p class="MsoNormal">Bạn có thể tham khảo tính ‘RIA’ của các ứng dụng Flex tại đây: <a href="http://flex.org/showcase/">http://flex.org/showcase/</a></p>
<p class="MsoNormal">
<p class="MsoNormal"><strong>2 – Silverlight của Microsoft</strong></p>
<p class="MsoNormal">Sinh sau để muộn hơn Flash/Flex rất nhiều nhưng Silverlight lại có lợi thế lớn vì là ‘con đẻ’ của Microsoft, mặc dù hiện tại thị phần còn khá khiêm tốn do không có nhiều máy tính được cài sẵn Silverlight runtime nhưng với tính phổ biến của hệ điều hành Windows và vũ khí Windows Update thì không khó để Microsoft có thể làm cho công nghệ Silverlight trở nên phổ biến.</p>
<p class="MsoNormal">Microsoft vốn nổi tiếng trong việc kế thừa ý tưởng của người đi trước (.NET là ví dụ điển hình của việc lấy ý tưởng từ Java của Sun), và Silverlight ra đời nhắm cạnh tranh với Adobe Flash/Flex cũng có khá nhiều cải tiến đáng kể, mà nổi bật là khả năng hỗ trợ mạnh mã về Multimedia truyền tài video chất lượng cao và hỗ trợ nhiều định dạng như .wmv, .avi… chứ không chỉ chơi các file .flv như Flash.</p>
<p class="MsoNormal">Đối với người sử dụng, chỉ cần cài silverlight runtime là có thể xem được các ứng dụng Silverlight trên hầu hết trình duyệt (IE, FireFox, Safari, Opera và thậm chỉ cả Chrome) và trên Hệ điều hành Windows hay Mac (đang phát triển trên Linux). Silverlight có giao diện được thiết kế dựa trên ngôn ngữ XAML và tương tác sử dụng javascript ( với Silverlight 1.0) hoặc C#, VB ( với Silverlight 2), do đó ta có thể sử dụng Visual Studio làm môi trường phát triển các ứng dụng Silverlight, rất gần gũi với các lập trình viên .NET. Cũng là một sinh viên Aptech và đang tìm hiểu về Silverlight nên tôi nghĩ đây là một công nghệ mới rất phù hợp và khá thú vị cho các bạn đã học qua năm thứ nhất tại Aptech. Để học Silverlight thì ta chỉ cần tìm hiểu thêm về ngôn ngữ đánh dấu hiển thị giao diện XAML, mà chủ yếu là kéo thả với công cụ Expression Blend.</p>
<p class="MsoNormal">Để xem công nghệ Silverlight đã hiện thực được các ứng dụng web RIA đến đâu, các bạn có thể tham khảo các showcase tại trang <a href="http://silverlight.net/Showcase/">http://silverlight.net/Showcase/</a></p>
<p><span style="font-size:12pt;font-family:&quot;">Hoặc tham khảo ứng dụng PageTurn <a href="http://www.hoangleminh.com/Silverlight/Aptech">http://www.hoangleminh.com/Silverlight/Aptech</a></span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hoangleminh.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hoangleminh.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hoangleminh.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hoangleminh.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hoangleminh.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hoangleminh.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hoangleminh.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hoangleminh.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hoangleminh.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hoangleminh.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hoangleminh.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hoangleminh.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hoangleminh.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hoangleminh.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoangleminh.wordpress.com&amp;blog=4997870&amp;post=4&amp;subd=hoangleminh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hoangleminh.wordpress.com/2008/09/29/ria-%e2%80%93-t%c6%b0%c6%a1ng-lai-c%e1%bb%a7a-cong-ngh%e1%bb%87-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5ae5319110fcc1d03550a74fca17948b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hoangleminh</media:title>
		</media:content>
	</item>
		<item>
		<title>Hello world!</title>
		<link>http://hoangleminh.wordpress.com/2008/09/27/hello-world/</link>
		<comments>http://hoangleminh.wordpress.com/2008/09/27/hello-world/#comments</comments>
		<pubDate>Sat, 27 Sep 2008 14:19:05 +0000</pubDate>
		<dc:creator>hoangleminh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Welcome to WordPress.com. This is your first post. Edit or delete it and start blogging!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoangleminh.wordpress.com&amp;blog=4997870&amp;post=1&amp;subd=hoangleminh&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Welcome to <a href="http://wordpress.com/">WordPress.com</a>. This is your first post. Edit or delete it and start blogging!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hoangleminh.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hoangleminh.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hoangleminh.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hoangleminh.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hoangleminh.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hoangleminh.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hoangleminh.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hoangleminh.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hoangleminh.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hoangleminh.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hoangleminh.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hoangleminh.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hoangleminh.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hoangleminh.wordpress.com/1/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoangleminh.wordpress.com&amp;blog=4997870&amp;post=1&amp;subd=hoangleminh&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hoangleminh.wordpress.com/2008/09/27/hello-world/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5ae5319110fcc1d03550a74fca17948b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hoangleminh</media:title>
		</media:content>
	</item>
	</channel>
</rss>
