Tech/Silverlight2009. 3. 18. 19:32
HTML에서 SILVERLIGHT로 초기화 매개변수 전달하는 방식
1. Object initParams으로  전달방식
2. HTML QueryString으로 전달하는 방식

1. ObjectinitParams으로  전달방식
   여러개를 initParams으로 전달
<param name="initParams" value="firstname=a,lastname=i" />


  전달받은 초기화 매개변수를 전달 받는다.
private void Application_Startup(object sender, StartupEventArgs e)
{
if (e.InitParams != null)
{
          foreach (var item in e.InitParams)
          {
                   this.Resources.Add(item.Key, item.Value);
     //application-scope내에서 리소스로 저장한다.
            }
          }
            string fname = string.Empty;
            if (e.InitParams.Keys.Contains("firstname"))
            {
                fname = e.InitParams["firstname"].ToString();
            }
            this.RootVisual = new Page(fname);
}


2. HTML QueryString으로 전달하는 방식
 직접 링크를 전달해 줄 수 있다는 장점이 있음
foreach (var itme in HtmlPage.Document.QueryString)
{
TextBlock tb = new TextBlock();
 tb.Text = string.Format("{0}:{1}", itme.Key, itme.Value);
 InitParams.Children.Add(tb);
}

'Tech > Silverlight' 카테고리의 다른 글

Silverlight with WEB  (0) 2009.03.30
Loading Dynamic XAPs and Assemblies  (0) 2009.03.19
HTML BROWSER INTEGRATION  (0) 2009.03.16
Isolated Storage in Silverlight 2  (0) 2009.03.16
Posted by 알 수 없는 사용자
Tech/Silverlight2009. 3. 16. 19:52
HTML BROWSER INTEGRATION

1. Javascript에서 Silverlight 모듈내에 정의된 메소드 사용하기.
2. Silverlight에서 Javascript에서 정의된 메소드 호출하기.
3. Silverlight Event 연동.


1. Javascript에서 Silverlight 모듈내에 정의된 메소드 사용하기.  
  Silverlight에서 작성된 메소드를 JavaScript에서 액서스 가능하도록 설정.
//JavaScript에서 인식 가능한 Object로 등록.
HtmlPage.RegisterScriptableObject("slInternal", this);
//액서스 가능하도록 설정.
[ScriptableMember]
public string SayHelloToMe(string firstName)
{
  Block1.Text = firstName;
  return "성공";
}

 JavaScript에서 Silverlight 메소드 호출.
var slObj = document.getElementById("Xaml1");       

var ret = slObj.content.slInternal.SayHelloToMe("자이닉스");



2. Silverlight에서 Javascript에 정의된 메소드 호출하기
 Javascirpt 함수 작성.

<script type="text/javascript">

function sayGoodbye(name)

{

   alert( "name : " + name);
  
return "성공";

}

</script>


 Silverlight에서 Javascript 존재하는 함수 호출

string ret = (string) HtmlPage.Window.Invoke("sayGoodbye", "자이닉스");

또는
ScriptObject jsObj = (ScriptObject)HtmlPage.Window.GetProperty("sayGoodbye");
string ret = (string)jsObj.InvokeSelf(TextBox1.Text, 1000);


3. Silverlight Event 연동.
 이벤트 정의
[ScriptableType]

public class CompletedEventArgs : EventArgs

{

public CompletedEventArgs(string status, string result)

{

Status = status;

Result = result;

}

 

[ScriptableMember]

public string Status { get; set; }

public string Result { get; set; }

}


 델리게이트를 ScriptableMember로 선언.

[ScriptableMember]

public event EventHandler<CompletedEventArgs> Completed;

private void OnCompleted(string status, string result)

{

if (Completed != null)

{

CompletedEventArgs args = new CompletedEventArgs ( status, result );

Completed(this, args);

}


}

 버튼을 클릭했을 때, 이벤트 발생.
 private void Button2_Click(object sender, RoutedEventArgs e)

 {

            OnCompleted("OK", "자이닉스");           

 }


 Javascript에서 Silverlight에서 발생되는 이벤트 연결.
function bind()

{

var slObj = document.getElementById("Xaml1");

alert(slObj.content.slInternal);

slObj.content.slInternal.Completed = function(sender, a) 

{

// sender는 Silverlight 객체이다. (slObj.content.slInternal)

alert(a.Result);

}

}




참고
HTML 페이지에서 Silverlight에 있는 이벤트를 연결할 때, HTML 페이지의 OnLoad 이벤트에서 처리하게 되면 Silverlight 어플리케이션이 생성되어 있지 않을 수도 있기 때문에 스크립트 오류를 발생시킬 수 있다. 이것을 정상적으로 처리하기 위해서는 Silverlight 어플리케이션의 로드가 끝난 시점에 HTML 페이지에 Silverlight 어플리케이션이 로드 되었다는 것을 알려주고, 그 때 HTML 페이지에서 Silverlight의 이벤트 연결 작업을 하면 된다.
Silverlight 로드 완료 -> HTML 페이지에 전달 -> HTML 페이지에서 Silverlight 어플리케이션 이벤트 연결




'Tech > Silverlight' 카테고리의 다른 글

Silverlight with WEB  (0) 2009.03.30
Loading Dynamic XAPs and Assemblies  (0) 2009.03.19
USING STARTUP PARAMETERS WITH SILVERLIGHT  (0) 2009.03.18
Isolated Storage in Silverlight 2  (0) 2009.03.16
Posted by 알 수 없는 사용자