반응형
-퍼온자료-
실버라이트 1.1에서 2 베타1으로 버전업이 되면서 변경된 부분이 상당히 있습니다.
그래서 마이그레션하기도 쉽지 않습니다.
그래서 실버라이트 2 프로젝트를 새로 만들어서 클래스 복사하는 형식으로 마이그레이션을 하는 분들이 많을 것이라고 생각이 됩니다.
이 마이그레이션 작업을 하는 분들에게 도움이 되고자 변경된 내용을 정리해 보았습니다.
내용은 MSDN과 실버라이트(Silverlight) 정보공유 카페에서 참고를 하였습니다.
1. EventHandler의 변화
MouseLeftButtonUp과 MouseLeftButtonDown 의 Event가 다음과 같이 바뀌었습니다.
MouseLeave 의 Event가 다음과 같이 바뀌었습니다.
Loaded 의 Event가 다음과 같이 바뀌었습니다.
KeyEvent 에서 KeyboardEventArgs의 아규먼트 값의 Key 값이 Key의 enum 타입으로 바뀌었습니다.
2. BrowserHost 변경
이 기능은 사이즈 변경이나 전체화면을 사용할 때 많이 사용하셨을 것입니다.
네임스페이스와 클래스가 아래와 같이 변경이 되었습니다.
Resize 이벤트 처리는 아래와 같이 변경 되었습니다.
IsFullScreen 속성의 위치는 아래와 같이 변경되었습니다.
풀스크린 변경 이벤트 핸들러
네임스페이스
3. Image.Source 사용법
1.1에서는 Uri 클래스를 바로 적용을 했지만 2에서는 Bitmap으로 변경해서 적용을 하도록 변경이 되었습니다.
BitmapImage를 사용하면서 좋은 점은 BitmapImage에 DownloadProgress 이벤트가 있어서 이미지가 다 받아졌는지 확인이 가능하다는 것입니다.
네임스페이스
4. HtmlTimer 대신 DispatcherTimer 사용
Silverlight 2에서는 HtmlTimer가 사라졌습니다. 대신 아래와 같은 클래스를 사용하면 될것입니다.
HtmlTimer를 사용하시던 분은 DispatcherTimer를 사용 할것을 권합니다.
사용법은 비슷하며, Interval을 TimeSpan으로 수정만 하시면 될것입니다.
5. Downloader 대신 WebClient 사용
1.1에서 한글을 사용하기 위해 Downloder를 많이 사용해 보셔을 것입니다. 그러나 Silverlight 2에서 이 Downloader가 사라졌습니다. 대신 WebClient를 사용하시면 됩니다.
파일 전송을 위한 메서드로 OpenReadAsync와 DownloadStringAsync가 지원됩니다.
OpenReadAsync
받아올 파일이 wmv, zip 파일같이 이진파일일 경우 사용합니다.
이벤트 아규먼트로 넘어오는 e.Result 값은 Stream으로 넘어온다.
Zip 파일 다운로드시 사용 예제
DownloadStringAsync
받아올 파일이 xml이나 Text 형식일 경우 이 메소드를 사용합니다.
이벤트 아규먼트로 넘어오는 e.Result 값은 String으로 넘어온다.
* 참고 : 실버라이트2의 루트는 1.1과는 달리 ClientBin 폴더가 루트로 인식됩니다. 그러니 다운로드할 파일은 기본적으로 ClientBin 폴더 이하에 있어야 합니다. 절대경로로 사용할 경우는 상관없습니다.
네임스페이스
6. HtmlPage에서 HtmlDocument로 이동된 함수들
예제)
7. HtmlPage에서 HtmlWindow로 이동된 함수들
예제)
작성자 : 상현넘™ [http://www.shblitz.net]
실버라이트 1.1에서 2 베타1으로 버전업이 되면서 변경된 부분이 상당히 있습니다.
그래서 마이그레션하기도 쉽지 않습니다.
그래서 실버라이트 2 프로젝트를 새로 만들어서 클래스 복사하는 형식으로 마이그레이션을 하는 분들이 많을 것이라고 생각이 됩니다.
이 마이그레이션 작업을 하는 분들에게 도움이 되고자 변경된 내용을 정리해 보았습니다.
내용은 MSDN과 실버라이트(Silverlight) 정보공유 카페에서 참고를 하였습니다.
1. EventHandler의 변화
MouseLeftButtonUp과 MouseLeftButtonDown 의 Event가 다음과 같이 바뀌었습니다.
- 1.1 alpha : MouseEventHandler, MouseEventArgs
- 2 beta 1 : MouseButtonEventHandler, MouseButtonEventArgs
- 2 beta 1 : MouseButtonEventHandler, MouseButtonEventArgs
MouseLeave 의 Event가 다음과 같이 바뀌었습니다.
- 1.1 alpha : EventHandler, Eventargs
- 2 beta 1 : MouseEventHandler, MouseEventArgs
- 2 beta 1 : MouseEventHandler, MouseEventArgs
Loaded 의 Event가 다음과 같이 바뀌었습니다.
- 1.1 alpha : EventHandler, Eventargs
- 2 beta 1 : RoutedEventHandler, RoutedEventArgs
- 2 beta 1 : RoutedEventHandler, RoutedEventArgs
KeyEvent 에서 KeyboardEventArgs의 아규먼트 값의 Key 값이 Key의 enum 타입으로 바뀌었습니다.
void onKeyUp(object sender, KeyboardEventArgs e)
{
switch (e.Key) // e.Key가 enum 타입입니다.
{
....
}
}
{
switch (e.Key) // e.Key가 enum 타입입니다.
{
....
}
}
2. BrowserHost 변경
이 기능은 사이즈 변경이나 전체화면을 사용할 때 많이 사용하셨을 것입니다.
네임스페이스와 클래스가 아래와 같이 변경이 되었습니다.
BrowserHost -> Application.Current.Host.Content
Resize 이벤트 처리는 아래와 같이 변경 되었습니다.
Application.Current.Host.Content.Resized += new EventHandler(Content_Resized);
void Content_Resized(object sender, EventArgs e)
{
Width = Application.Current.Host.Content.ActualWidth;
Height = Application.Current.Host.Content.ActualHeight;
}
{
Width = Application.Current.Host.Content.ActualWidth;
Height = Application.Current.Host.Content.ActualHeight;
}
IsFullScreen 속성의 위치는 아래와 같이 변경되었습니다.
// 풀스크린 여부
Application.Current.Host.Content.IsFullScreen
Application.Current.Host.Content.IsFullScreen
풀스크린 변경 이벤트 핸들러
Application.Current.Host.Content.FullScreenChanged += new EventHandler(Content_FullScreenChanged);
void Content_FullScreenChanged(object sender, EventArgs e)
{
System.Windows.Interop.Content content = Application.Current.Host.Content;
// 풀스크린 여부
if (content .IsFullScreen)
{
double heightRatio = content.ActualHeight / this.Height;
double widthRatio = content.ActualWidth / this.Width;
ScaleTransform scale = new ScaleTransform();
scale.ScaleX = widthRatio;
scale.ScaleY = heightRatio;
this.RenderTransform = scale;
}
else
{
this.RenderTransform = null;
}
}
{
System.Windows.Interop.Content content = Application.Current.Host.Content;
// 풀스크린 여부
if (content .IsFullScreen)
{
double heightRatio = content.ActualHeight / this.Height;
double widthRatio = content.ActualWidth / this.Width;
ScaleTransform scale = new ScaleTransform();
scale.ScaleX = widthRatio;
scale.ScaleY = heightRatio;
this.RenderTransform = scale;
}
else
{
this.RenderTransform = null;
}
}
네임스페이스
using System.Windows;
3. Image.Source 사용법
1.1에서는 Uri 클래스를 바로 적용을 했지만 2에서는 Bitmap으로 변경해서 적용을 하도록 변경이 되었습니다.
Image image = new Image();
image.Source = new BitmapImage(new Uri("http://shblitz.net/shblitz.jpg", UriKind.Absolute));
image.Source = new BitmapImage(new Uri("http://shblitz.net/shblitz.jpg", UriKind.Absolute));
BitmapImage를 사용하면서 좋은 점은 BitmapImage에 DownloadProgress 이벤트가 있어서 이미지가 다 받아졌는지 확인이 가능하다는 것입니다.
Image image = new Image();
BitmapImage bitmap = new BitmapImage(new Uri(http://shblitz.net/shblitz.jpg, UriKind.Absolute));
bitmap.DownloadProgress += new DownloadProgressEventHandler(bitmap_DownloadProgress);
BitmapImage bitmap = new BitmapImage(new Uri(http://shblitz.net/shblitz.jpg, UriKind.Absolute));
bitmap.DownloadProgress += new DownloadProgressEventHandler(bitmap_DownloadProgress);
// 다운로드 완료 이벤트 핸들러
void bitmap_DownloadProgress(object sender, DownloadProgressEventArgs e)
{
BitmapImage bitmap = sender as BitmapImage;
void bitmap_DownloadProgress(object sender, DownloadProgressEventArgs e)
{
BitmapImage bitmap = sender as BitmapImage;
// 다운로드 성공
if (e.Progress == 1)
{
// 로직...
}
}
if (e.Progress == 1)
{
// 로직...
}
}
네임스페이스
using System.Windows.Media.Imaging;
4. HtmlTimer 대신 DispatcherTimer 사용
Silverlight 2에서는 HtmlTimer가 사라졌습니다. 대신 아래와 같은 클래스를 사용하면 될것입니다.
System.Threading.Timer
System.Windows.Threading.DispatcherTimer
HtmlTimer를 사용하시던 분은 DispatcherTimer를 사용 할것을 권합니다.
사용법은 비슷하며, Interval을 TimeSpan으로 수정만 하시면 될것입니다.
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(3000); // 3초
// timer.Interval = new TimeSpan(0, 0, 0, 0, 3000); // 3초
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
timer.Interval = TimeSpan.FromMilliseconds(3000); // 3초
// timer.Interval = new TimeSpan(0, 0, 0, 0, 3000); // 3초
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
void timer_Tick(object sender, EventArgs e)
{
// 로직...
}
{
// 로직...
}
5. Downloader 대신 WebClient 사용
1.1에서 한글을 사용하기 위해 Downloder를 많이 사용해 보셔을 것입니다. 그러나 Silverlight 2에서 이 Downloader가 사라졌습니다. 대신 WebClient를 사용하시면 됩니다.
파일 전송을 위한 메서드로 OpenReadAsync와 DownloadStringAsync가 지원됩니다.
OpenReadAsync
받아올 파일이 wmv, zip 파일같이 이진파일일 경우 사용합니다.
WebClient wc = new WebClient();
wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
wc.OpenReadAsync(new Uri("song.wma", UriKind.Relative));
wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
wc.OpenReadAsync(new Uri("song.wma", UriKind.Relative));
이벤트 아규먼트로 넘어오는 e.Result 값은 Stream으로 넘어온다.
// 다운로드 완료 이벤트 핸들러
void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
MediaElement media = new MediaElement();
if ((e.Error == null) && (e.Cancelled == false))
{
media.SetSource = e.Result;
LayoutRoot.Children.Add(media);
media.Play();
}
}
void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
MediaElement media = new MediaElement();
if ((e.Error == null) && (e.Cancelled == false))
{
media.SetSource = e.Result;
LayoutRoot.Children.Add(media);
media.Play();
}
}
Zip 파일 다운로드시 사용 예제
void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if ((e.Error == null) && (e.Cancelled == false))
{
StreamResourceInfo zipResourceInfo = new StreamResourceInfo(e.Result, null);
StreamResourceInfo imageResourceInfo = Application.GetResourceStream(zipResourceInfo, new Uri("image1.jpg"));
// .....
}
}
{
if ((e.Error == null) && (e.Cancelled == false))
{
StreamResourceInfo zipResourceInfo = new StreamResourceInfo(e.Result, null);
StreamResourceInfo imageResourceInfo = Application.GetResourceStream(zipResourceInfo, new Uri("image1.jpg"));
// .....
}
}
DownloadStringAsync
받아올 파일이 xml이나 Text 형식일 경우 이 메소드를 사용합니다.
WebClient wc = new WebClient();
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
wc.DownloadStringAsync(new Uri("data.xml", UriKind.Relative));
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
wc.DownloadStringAsync(new Uri("data.xml", UriKind.Relative));
이벤트 아규먼트로 넘어오는 e.Result 값은 String으로 넘어온다.
// 다운로드 완료 이벤트 핸들러
void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
XmlReader xr = XmlReader.Create(new StringReader(e.Result));
//...
}
void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
XmlReader xr = XmlReader.Create(new StringReader(e.Result));
//...
}
* 참고 : 실버라이트2의 루트는 1.1과는 달리 ClientBin 폴더가 루트로 인식됩니다. 그러니 다운로드할 파일은 기본적으로 ClientBin 폴더 이하에 있어야 합니다. 절대경로로 사용할 경우는 상관없습니다.
네임스페이스
using System.Net;
6. HtmlPage에서 HtmlDocument로 이동된 함수들
Submit, Cookies, QueryString, DocumentUri
예제)
System.Windows.Browser.HtmlDocument doc = new System.Windows.Browser.HtmlDocument();
string seq = doc.QueryString["ParameterName"];
string seq = doc.QueryString["ParameterName"];
7. HtmlPage에서 HtmlWindow로 이동된 함수들
CurrentBookmark, Alert/Confirm/Eval/Prompt, CreateInstance, Navigate*/NavigateToBookmark
예제)
System.Windows.Browser.HtmlWindow win = System.Windows.Browser.HtmlPage.Window;
win.Alert("경고");
win.Alert("경고");
작성자 : 상현넘™ [http://www.shblitz.net]
반응형
'Dev > Silveright' 카테고리의 다른 글
실버라이트 - DispatcherTimer 이용한 타이머 만들기 (0) | 2008.08.07 |
---|---|
실버라이트 - Silverlight Key Enumeration (0) | 2008.08.05 |
[실버라이트] KeyDown 이벤트 만들기 (0) | 2008.07.30 |
[Sliverlight] Canvas는 WPF 프로젝트에서 지원되지 않습니다. (0) | 2008.07.29 |
html에 실버라이트 전체화면 나타내기 (0) | 2008.07.29 |