[무한도전] Silverlight 메뉴바 만들기 (6)
주의 : 해당 내용은 실버라이트 1.1버전을 내용을 작성된 내용입니다. 현재 나와 있는 버전과 차이가 있어 버그가 있을수 있습니다. 참고하세요!! [무한도전] Silverlight 메뉴바 만들기 (6)
이제 마지막이 되겠군요! 코드비하인드에서는 어떻게 처리 했는지 알아 보도록 하겠습니다.
먼저 저는 아래 그림과 같이 크게 5가지로 설명하겠습니다.
1. 변수 선언 및 열거
코드는 아래와 같습니다.
Page.xaml.cs페이지 (변수 선언 및 열거) |
string URL = null; enum SubMenu { Menu_1,Menu_2,Menu_3,Menu_4 } SubMenu SM = SubMenu.Menu_1 |
- URL 변수는 나중에 웹사이트 URL주소 값을 넣기위한 변수입니다.
- SubMenu 열거형을 정의한것 입니다. 나중에 SubMenu 이벤트 조건에서 사용이 될 거예요! 그리고 초기화 "Menu_1"로 설정합니다.
2. Page_loader
코드는 아래와 같습니다.
Page.xaml.cs페이지 (Page_loaded) |
public void Page_Loaded(object o, EventArgs e) { // Required to initialize variables InitializeComponent(); //Main_Menu 이벤트 txt_m1.MouseEnter += new MouseEventHandler(txt_m1_MouseEnter); txt_m2.MouseEnter += new MouseEventHandler(txt_m2_MouseEnter); txt_m3.MouseEnter += new MouseEventHandler(txt_m3_MouseEnter); txt_m4.MouseEnter += new MouseEventHandler(txt_m4_MouseEnter); //Sub_Menu 이벤트 txtsub1.MouseLeftButtonDown += new MouseEventHandler(txtsub1_MouseLeftButtonDown); txtsub2.MouseLeftButtonDown += new MouseEventHandler(txtsub2_MouseLeftButtonDown); txtsub3.MouseLeftButtonDown += new MouseEventHandler(txtsub3_MouseLeftButtonDown); } |
위 코드의 txt_m1,2,3,4 는 MainMenu의 TextBlock 이벤트(onmouseover event와 같음)를 준 것입니다.마찬가지로 txtsub1,2,3 또한 TextBlock 이벤트(onmousedown event와 같음)를 준 것입니다.
3. Main_Menu 이벤트
코드는 아래와 같습니다.
Page.xaml.cs페이지(Main_Menu 이벤트) |
//Maine 04 void txt_m4_MouseEnter(object sender, MouseEventArgs e) { SM = SubMenu.Menu_4; Menu1_Story.Stop(); Menu2_Story.Stop(); Menu3_Story.Stop(); Menu4_Story.Begin(); SubText_Name("Google", "Yahoo", "MS"); } //Maine 03 void txt_m3_MouseEnter(object sender, MouseEventArgs e) { SM = SubMenu.Menu_3; Menu1_Story.Stop(); Menu2_Story.Stop(); Menu4_Story.Stop(); Menu3_Story.Begin(); SubText_Name("Hoons_NET", "Taeyo_NET", "Devpia"); } //Maine 02 void txt_m2_MouseEnter(object sender, MouseEventArgs e) { SM = SubMenu.Menu_2; Menu1_Story.Stop(); Menu3_Story.Stop(); Menu4_Story.Stop(); Menu2_Story.Begin(); SubText_Name("DW_blog1", "DW_blog2", "DW_Cyworld"); } //Maine 01 void txt_m1_MouseEnter(object sender, MouseEventArgs e) { SM = SubMenu.Menu_1; Menu2_Story.Stop(); Menu3_Story.Stop(); Menu4_Story.Stop(); Menu1_Story.Begin(); SubText_Name("NAVER", "DAUM", "NATE"); } // SubMenu TextBlock에 Text 값지정 private void SubText_Name(string txt1, string txt2, string txt3) { txtsub1.Text = txt1; txtsub2.Text = txt2; txtsub3.Text = txt3; } |
코드가 길어 보이지만 알고 보면 별거 없습니다. 일단 마우스가 해당객체의 위에 올라왔을 때 이벤트를 발생시키 겠지요. 그럼 해당 이벤트는 먼제 SM(열거형)값을 정의해 줍니다. 그래야 SubMenu에서 링크를 알맞게 걸수 있기때문입니다. 그부분은 차후에 다시 설명하겠습니다. 아무튼 정의해 줍니다. 그리고 나서 우리가 만들었던 4개의 StroyBoard중에서 해당 객체에 관련된 내용을 제외한 나머지 3개는 Stop()메소드로 지정합니다. 그렇게 하지않으면 StroyBoard가 몇개씩 겹치겠지요~^^;;그러면 안되잖아요.그리고 나서 SubText_Name 메소드를 호출합니다. SubText_Name은 인자값 3개를 받습니다. 인자값으로는 SubMenu의 이름이 되겠지요~! SubText_Name 메소드 코드를 보시면 "아하~"하실 겁니다~!!^^;;
4. Sub_Menu 이벤트
코드는 아래와 같습니다.
Page.xaml.cs페이지(Sub_Menu 이벤트) |
//sub 01 void txtsub1_MouseLeftButtonDown(object sender, MouseEventArgs e) { if (SM == SubMenu.Menu_1) URL = "http://www.naver.com"; else if (SM == SubMenu.Menu_2) URL = "http://blog.naver.con/kdw8751"; else if (SM == SubMenu.Menu_3) URL = "http://www.hoons.kr"; else if (SM == SubMenu.Menu_4) URL = "http://www.google.co.kr"; Link(); } //sub 02 void txtsub2_MouseLeftButtonDown(object sender, MouseEventArgs e) { if (SM == SubMenu.Menu_1) URL = "http://www.daum.net"; else if (SM == SubMenu.Menu_2) URL = "http://drum-83.tistory.com"; else if (SM == SubMenu.Menu_3) URL = "http://taeyo.net"; else if (SM == SubMenu.Menu_4) URL = "http://kr.yahoo.com"; Link(); } //sub 03 void txtsub3_MouseLeftButtonDown(object sender, MouseEventArgs e) { if (SM == SubMenu.Menu_1) URL = "http://www.nate.com"; else if (SM == SubMenu.Menu_2) URL = "http://www.cyworld.com/ww7747"; else if (SM == SubMenu.Menu_3) URL = "http://www.devpia.com"; else if (SM == SubMenu.Menu_4) URL = "http://www.microsoft.com/korea"; Link(); } |
위 코드는 사용자가 해당 SubMenu를 클릭했을때 해당 URL 값을 지정하는 것입니다.그리고 여기서 조건은MainMenu1온것인지..2에서 온것인지..3에서 온것인지 확인 하는 조건이죠. 해당 URL값을 지정했다면 Link()메소드를 호출하게 되는 겁니다.
5. 링크 연결
코드는 아래와 같습니다.
Page.xaml.cs페이지(링크 연결) |
using System.Windows.Browser; ... private void Link() { HtmlPage.Navigate(URL, "test"); } |
위 코드는 아주 간단합니다. 링크를 연결해 주는것 일뿐이죠.HtmlPage.Navigate 함수를 쓰기 위해서는 using System.Windows.Browser; 를 선언해 주어야 합니다.
지금까지 간단한 메뉴바를 만들어 보았습니다. 혹시 잘안되시는 분들을 위해 제 소스를 올려놓겠습니다. 제가 처음으로 실버라이트를 이용해서 만들어본 프로젝트라 정말 뿌듯합니다^^; 다음에는 더욱더 멋진 걸 만들어서 올리도록 하겠습니다. ^^