Microsoft Expression Blend 2 툴을 이용하여 XAML을 생성하였다;
그중 Image라는 컨트롤을 넣었는데 상황에 따라 그림파일을 동적으로 바꿔주고 싶었지만

방법을 몰라 고생하다가! 별것도 아닌걸 꽤나 오랜시간걸려서 찾은것같아;
이런문제로 고생하고 있을 다른 분들을 위한 포스팅!

<Image Height="80" HorizontalAlignment="Left" x:Name="itemImage" Width="80" Source="image.bmp"/>
이 XMAL 코드에서처럼  Source="image.bmp" 이런식으로 초기에는 간단하게 bmp 파일과 연결할수있다;

비하인드 코드에서 제어하기 위해서는

 private void ChageSource()
 {
    itemImage.Source = 
          new BitmapImage(new Uri(m_itemImageURL, UriKind.Relative));
 }
 

BitmapImage를 생성하고 해당하는 경로를 Uri로 넣어주면 간단하게 해결된다!!
사용을 위해 using System.Windows.Media.Imaging;  을 추가한다
여기서 Uri()생성자의 처음 인자는 "파일의 경로" 이고

두번째인자의 UrlKind.Relative (상대경로) ,UrlKind.Absolute (절대경로) ,UrlKind.RelativeOrAbsolute (둘다)
의미한다!


Posted by 맨날맑음
,

실버라이트의 Storyboard를 이용하면 간단하게 타이머를 만들수있다;

물론 System.Windows.Threading.DispatcherTimer 를 이용해도 같은 효과를 낼수있다!

매우 간단한 예제인지라 소스코드만 보면 금새 알수 있을것이다!


using System;
using System.Windows;
using System.Windows.Controls;
//실버라이트 스토리보드를 이용하기 위해 using!
using System.Windows.Media.Animation;

//실버라이트 스토리보드를 이용한 타이머 예제
namespace MyTimer
{
    public partial class Page : UserControl
    {
        Storyboard timer = new Storyboard();
        int cnt = 0;

        public Page()
        {
            InitializeComponent();
            //타이머 간격 설정;
            timer.Duration = new Duration(new TimeSpan(0, 0, 1));

            //x:Name 설정            
            timer.SetValue(NameProperty, "StoryboardTimer");

            //타이머 종료 이벤트 등록
            timer.Completed += new EventHandler(timer_Completed);

            //타이머 시작
            timer.Begin();
        }

        //타이머 종료 이벤트
        void timer_Completed(object sender, EventArgs e)
        {
            txtResult.Text = string.Format("{0} TimeSpan..", ++cnt);
            //다시한번 타이머를 호출한다!
            timer.Begin();
        }
    }
}
Posted by 맨날맑음
,

리스트박스를 이용하여 채팅 프로그램을 구현했지만
글이 길어지면 자동으로 스크롤 돼지 않아서 불편한 경험이있었다;

이번 포스팅에서는 간단하게 리스트박스를 자동으로 스크롤 하는 방법을 알아보려구 한다;

매우 간단하다!! 단 두줄;

 void IDT_TEXT_KeyDown(object sender, KeyEventArgs e)
        {
            //텍스트박스에 누른 키가 엔터일경우
            if(e.Key == Key.Enter)
            {
                if (IDT_TEXT.Text == "")
                {
                   return;
                }

                IDL_LIST.Items.Add(IDT_TEXT.Text);
                //리스트박스의 스크롤을 자동으로///////////////////////////
                IDL_LIST.UpdateLayout();
                IDL_LIST.ScrollIntoView(IDL_LIST.Items[IDL_LIST.Items.Count-1]);
                ///////////////////////////////////////////////////////////
                IDT_TEXT.Text = "";
            }   
        }   
  
여기서 주목할 부분은 이 두줄이다
IDL_LIST.UpdateLayout();
IDL_LIST.ScrollIntoView(IDL_LIST.Items[IDL_LIST.Items.Count-1]);


리스트박스를 업데이트하고; 스크롤을 가장 최근의 글을 보게 하면
자동으로 스크롤되느느 리스트박스를 볼수있다!!!
모두들 메리크리스마스!!ㅋㅋㅋ
Posted by 맨날맑음
,

소스코드

using System.Xml.Linq;

namespace XMLSample
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
           
            WebClient wc = new WebClient();
            //이벤트 등록
            wc.DownloadStringCompleted +=
                new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);                            
            wc.DownloadStringAsync(new Uri("Outer.xml", UriKind.RelativeOrAbsolute));         
        }

        void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            XDocument xDoc = XDocument.Parse(e.Result); // 외부에 존재하는 XML 파일을 읽을 경우

            var linq = from c in xDoc.Descendants("Item")
                       select (string)c.Value;

            foreach (string item in linq)
            {
                tbOuter.Text += item + "\n";
            }
        }
    }
}


XML 소스
<?xml version="1.0" encoding="utf-8" ?>
<Items>
  <Item>Car</Item>
  <Item>Road</Item>
  <Item>Tree</Item>
  <Item>Park</Item>
  <Item>Mountain</Item>
</Items>


Posted by 맨날맑음
,