본문 바로가기

Silverlight

(57)
동적으로 xap 파일 읽어 추가하기(2) 이럴쑤가~ 이렇게 이쁘게 붙여넣는 방법이 있었군요!! Load Dll from xap void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { StreamResourceInfo xapSri = new StreamResourceInfo(e.Result, null); StreamResourceInfo manifestSri = Application.GetResourceStream(xapSri, new Uri("AppManifest.xaml", UriKind.Relative)); using (XmlReader xmlReader = XmlReader.Create(manifestSri.Stream)) { //xml을 읽을 노드가 없을때..
동적으로 xap 파일 읽어 추가하기(1) 동적으로 xap파일을 읽어서 추가해주기 위해서는 우선 xap파일 안의 Resource들을 읽어야 할 텐데요. xap 파일혹은 zip 파일 안의 Resource 를 읽어 들이는 방법은요 1)Xap파일(혹은 Zip파일)을 읽어 들이구요. 2)이렇게 읽어 들인 Stream을 인자로 받는 StreamResourceInfo를 하나 만들어 주시고요. 3)그렇게 만들어진 StreamResourceInfo 를 Application.GetResourceStream을 통하여 필요한 Resource명과 함께 넣어주면 아래 그림과 같이 Resource파일을 반환해 줍니다. 4)이렇게 읽어 들인 resourceSri 에있는 Stream을 읽어 들이면 됩니다. 참~ 쉽죠잉~ 예제소스)
Resource를 Reference 해서 사용할때 주의해야 할점 실버라이트3가 되면서 ResourceDictionary 의 MergedDictionaries 를 이용해서 Resource들을 한곳이 아니라 여러곳에 놓고 모아서 사용할수 있게 되었는데요. 요때!!! 주의 하셔야 할점이 하나 있습니다. Resource를 모아놓은 프로젝트를 Reference 해서 사용할때 Resource를 모아놓은 프로젝트의 이름이 Resources 일경우 추가가 되지 않습니다. 아마도, Dll로 빠질때 Resoureces 라는 폴더가 생성 되면서 그 안으로 들어가는것 같은데요 그때 같은 이름이어서 쫑나는것 같습니다. 사용 하실때 Resoureces를 피하시는게 좋겠네요 ^^;
Add as Link 프로젝트를 여러개 생성하다 보면 여기저기에 동일한 Resource들이 중복이 되는데요. 그래서 Add as Link 를 사용해서 동일한 Resource를 관리 하고는 하지요. 이게 쵸큼 웃긴게 Add를 하는곳에 예를 들어 Resources라는 폴더를 만들고 그안에 Add 를 하고 나서 그 Resource를 찾기 위해서 /Resoureces/리소스명 을 할경우 찾지 못합니다. 클릭 해서 보세요 ;-) 위에 사진처럼 할경우 찾지 못하므로 런타임시에 에러를 발생 시킵니다. compile을 할때 Add as Link 했던 resourece들을 copy를 해오는데요 copy를 해줄때 제가 만들어놨던 Resources 라는 폴더가 아니라 root 바로 안에다가 copy를 해주나 보더라구요~ 그래서 찾지 못하는것 같..
HttpUtility.UrlEncode Silverlight2 에서 버그인지 한글을 Url에 실어 보낼때 HttpUtility.UrlEncode(HttpUtility.UrlEncode("")) 요런식으로 2번씩해야 제대로 되었었는데요 이제는 한번만 해도 되네요~ 이제 정신차린겐가? 후후
동적으로 Javascript 추가하기 HtmlElement script = HtmlPage.Document.CreateElement("script"); script.SetAttribute("type", "text/javascript"); script.SetProperty("text", "function BuyOne{0}(value) { alert(value); slobj.Content.{0}.PushFlickrToken(value) }"); HtmlPage.Document.Body.AppendChild(script); 밑에 적어드린 객체가 HtmlDOM 에 포함 되어 있는지를 체크 하고나서 Javascript가 필요하다면 위와같은 방법으로 만들어 주면 됩니다. 참~ 쉽죠잉~ (-_-;;... 하지만 전 완전 몰랐었던....이팀장님이 알려주셔..
Html DOM 에 객체가 존재하는지 체크 하는 방법 bool IsExists(string objectName) { string evalString = string.Format("typeof({0})!='undefined'", objectName); return (bool)HtmlPage.Window.Eval(evalString); } 넣어준 objectName의 이름을 가지는 객체가 undefined 되어있는지를 체크해서 넘겨주면 실버라이트 내에서 찾는 객체가 Html DOM 에 포함되어있는지를 알수 있습니다.
Service Reference 추가 할때 주의 해야 할점 Service Reference 를 추가 하고 이름을 줄때 이름 사이에 "." 이 들어가면 에러가 발생 합니다. ㅠ_ㅠ 이야기 들었었는데 이것땜시 또 한참을 삽질을 ;-{