'분류 전체보기'에 해당되는 글 744건

  1. 2011.03.24 [WP7] 페이지 이동간의 파라미터 주기
  2. 2011.03.21 [wp7] Control 만들기
  3. 2011.03.21 [wp7] Control 만들때 generic.xaml 에서 Converter 쓰기
  4. 2011.03.21 [wp7] WebClient에서 Caching 문제로 갱신이 되지 않을 때…
  5. 2011.03.18 [생활] 다이어트 속설
  6. 2011.03.17 [wp7] WebClient에 Parameter 주기
  7. 2011.03.15 [wp7] 웹에서 이미지를 다운받고 앱에 보여주기 1
  8. 2011.03.15 [wp7] 폰에서 다이렉트로 MarketPlace 접근 방법
  9. 2011.03.15 [wp7] Linq.Foreach문을 잘 활용하자.
  10. 2011.03.11 [wp7] VisualStateManager 이용하기
  11. 2011.03.08 [util] 파일 검색 종결자 툴
  12. 2011.02.23 [wp7] StoryBoard 실행중인지 아닌지와 Skip 방법
  13. 2011.02.23 [wp7] Back버튼 눌러도 아무런 반응 없게 하기 2
  14. 2011.02.18 [wp7] xml에서 특수 문자 처리
  15. 2011.02.16 [vs] Visual Studio에서 내가 유용하게 쓰는 Extensions
  16. 2011.02.15 [wp7] ItemsControl을 사용한 WrapPanel 사용
  17. 2011.02.10 [wp7] 이미지 Build Action 의 Content 와 Resource의 차이
  18. 2011.02.08 [XNA] XNA의 역사
  19. 2011.01.27 휴즈플로우 앱 개발 뉴스 기사 1
  20. 2011.01.17 [asp.net] cookie 사용법 1
  21. 2011.01.07 google docs와 아이패드를 이용하여 Todo List 활용
  22. 2011.01.07 [wp7] 효율적인 isolatedStorageSetting 사용법
  23. 2011.01.06 [wp7] Observable Collection을 이용한 바인딩
  24. 2011.01.05 [wp7] Image behind에서 바꾸기
  25. 2010.12.02 [vs] Visual Studio 2010 단축키 모음 (병걸씨가 수고해 주신 자료^^)
  26. 2010.11.22 [asp.net] mvc2 에서 새로운 페이지 만들고 연결하기
  27. 2010.10.20 [wp7] 분리된 어셈블리에 대해서 다국어 리소스지원 1
  28. 2010.10.19 [wp7] Localization Resource 국제화 하는법
  29. 2010.10.18 [wp7] 람다식을 잘쓰자. 1
  30. 2010.10.10 [wp7] Event Handler 를 이용하여 변수가 변경되는지 감지
Windows Phone 72011. 3. 24. 16:05

이건 정말 옛날부터 알았던건데 혹시나 까먹을까 해서 쓴다.

 

NavigationServce.Navigate를 이용해서 페이지를 이동할때

 

var uri = new Uri(string.Format("/HugeFlow.Phone.Controls;component/AboutControl/AboutPage.xaml?AppName={0}&Version={1}&SiteAddress={2}&EmailAddress={3}&Year={4}&Company={5}"
                , appName, version, siteAddress, emailAddress, year, companyName), UriKind.RelativeOrAbsolute);

 

이런식으로 파라미터를 줄수 있다 웹과 같다.

 

그렇다면 받는쪽에서는 어떡해 할까?

 

받는 페이지에는

 

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
       {
           base.OnNavigatedTo(e);
 
           string appName;
           string version;            
           string siteAddress;
           string emailAddress;
           string year;
           string companyName;
 
           if (NavigationContext.QueryString.TryGetValue("AppName", out appName) == true)
           {
               AboutPageControl.AppName = appName;
           }
 
           if (NavigationContext.QueryString.TryGetValue("Version", out version) == true)
           {
               AboutPageControl.Version = version;
           }
 
           if (NavigationContext.QueryString.TryGetValue("SiteAddress", out siteAddress) == true)
           {
               AboutPageControl.SiteAddress = siteAddress;
           }
 
           if (NavigationContext.QueryString.TryGetValue("EmailAddress", out emailAddress) == true)
           {
               AboutPageControl.EmailAddress = emailAddress;
           }
 
           if (NavigationContext.QueryString.TryGetValue("Year", out year) == true)
           {
               AboutPageControl.Year = year;
           }
 
           if (NavigationContext.QueryString.TryGetValue("CompanyName", out companyName) == true)
           {
               AboutPageControl.CompanyName = companyName;
           }
       }

 

이렇게 하면 된다.

Posted by 동동(이재동)
Windows Phone 72011. 3. 21. 18:36

지금까지 UserControl만 주구장창 만들어보았으면

 

이번에는 Control을 만들어서 dll로 빼서 편리하게 사용해보자.

 

첨에는 프로젝트를 라이브러리 프로젝트로 하나 만든다.

 

그리고 일단 UI가 있는것은 스타일이 필요할테니 Theme 폴더안에 generic.xaml을 만들자

 

그리고 이렇게 입력하자

 

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
    xmlns:system="clr-namespace:System;assembly=mscorlib"
    xmlns:c="clr-namespace:AboutPageControlLibrary"    
    xmlns:sys="clr-namespace:System.Windows;assembly=System.Windows" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d">
    <Style TargetType="c:AboutPageControl">
        
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="c:AboutPageControl">                    
                    <Grid>
                        <ListBox x:Name="AppListBox"  Margin="30,0,0,0" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        

 

이렇게 해서 AboutPageControl을 만들고 그안에 단순히 ListBox만 하나 넣었다. x:name은 ApplistBox로 정했다.

 

자 이제

 

cs파일을 하나 만드는데 Control을 상속받자

 

public class AboutPageControl : Control

 

그리고 생성자를 만든다.

public AboutPageControl()
       {
           DefaultStyleKey = typeof(AboutPageControl);

 

이렇게 DefaultStylekey로 하여서 아까 generic.xaml에 정의된 스타일을 가져온다.

 

자 이렇게만 하고 프로젝트 하나 만들어서 여기 dll을 참조 한후 사용하면

 

ListBox가 보일것이다.(사실은 아무것도 안보일껏이다 itemSource가 없으니^^)

 

자 그럼 이제 Listbox에 ItemSource를 정의해보자.

 

일단 저기 generic.xaml에 정의한 스타일의 컨트롤을 호출을 해야 한다.

 

public override void OnApplyTemplate()
       {
           base.OnApplyTemplate();
           this._listBoxControl = GetTemplateChild("AppListBox") as ListBox;
       }

 

이렇게 OnApplyTemplate를 오버라이드 한후

 

GetTemplateChild를 이용해서 Listbox를 _ListBoxControl에 정의하였다. _listBoxControl은 전역변수에 이미 정의를 했다이로써 언제든지 ListBox를 쓸수 있게 되었다.

 

그후에 이제 이 Listbox Itemsource에 data를 넣어보자.

 

public AboutPageControl()
       {
           DefaultStyleKey = typeof(AboutPageControl);
           this.Loaded += new RoutedEventHandler(AboutPageControl_Loaded);
       }

 

loaded에 넣은 이유는 알것이다.

 

 

void AboutPageControl_Loaded(object sender, RoutedEventArgs e)
        {
            List<AppData> appDatas = new List<AppData>();
            appDatas.Add(new AppData() { Id = "App1", Name = "himan2", Description = "haha" });
            appDatas.Add(new AppData() { Id = "App1", Name = "himan2", Description = "haha" });
 
            _listBoxControl.ItemsSource = appDatas;
            _listBoxControl.ItemTemplate = ItemTemplate;

 

이렇게 itemsource를 넣었다.

 

그러면 이제 itemSource도 보일것이다. 근데 또 궁금증이 있다. itemTemplate은 어떻게 줄것인가?

Control이 아니라면 그냥 xaml상에서도 줄수 있지만 여기서 이렇게 behind로 해야만 했다.

저위에 정의 되어 있는 ItemTemplate은 이렇게 정의 해줘야 한다. 미리

 

public DataTemplate ItemTemplate
      {
          get { return (DataTemplate)GetValue(ItemTemplateProperty); }
          set { SetValue(ItemTemplateProperty, value); }
      }
 
      public static readonly DependencyProperty ItemTemplateProperty =
          DependencyProperty.Register("ItemTemplate", typeof(DataTemplate), typeof(AboutPageControl), new PropertyMetadata(OnItemTemplateChanged));
 
      protected static void OnItemTemplateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
      {
      }

 

사실 OnItemTemplateChanged는 의미가 없는듯 ;;

 

이렇게 정의 해두고 generic.xaml 에

 

<Setter Property="ItemTemplate" >            
           <Setter.Value>                
               <DataTemplate>
                   <Grid x:Name="grid">
                       <Grid.Resources>
                           <c:FileNameToFilePathImageConverter x:Name="FTFConverter" />
                       </Grid.Resources>
                       <Grid.ColumnDefinitions>
                           <ColumnDefinition Width="100" />
                           <ColumnDefinition />
                       </Grid.ColumnDefinitions>
                       <Grid.RowDefinitions >
                           <RowDefinition />
                           <RowDefinition />
                       </Grid.RowDefinitions>
                       <Image x:Name="image" Source="{Binding iconFileName, Converter={StaticResource FTFConverter}}"  Grid.RowSpan="2" Width="99" Height="99"/>
                       <TextBlock x:Name="textBlock" Text="{Binding Name}" Grid.Column="1" FontWeight="Bold" Margin="20,0,0,0"/>
                       <TextBlock Text="{Binding Description}" Grid.Column="1" Grid.Row="1" FontSize="16" Margin="20,0,0,0" TextWrapping="Wrap" />
                   </Grid>
               </DataTemplate>
       </Setter.Value>
       </Setter>

 

이렇게 Property에 이름을 ItemTemplate로 정의 한다면

 

ListBox에 ItemTemplate이 정의가 되어서 아주 멋있는 ListBox가 보여질것이다. 이미지와 글이 있는^^

 

이제 어떻게 컨트롤을 처음에 만들고 Listbox를 추가하며 그안에 itemSouce와 ItemTemplate을 정의 하는지 알려주었다

Posted by 동동(이재동)
Windows Phone 72011. 3. 21. 18:17

대부분 컨버터 쓸때

 

<phone:PhoneApplicationPage.Resources>
        <Converter:FileNameToFilePathImageConverter x:Key="FTFConverter" />        

 

이런식으로 phoneApplicationPage.Resources안에 넣는다.

 

그러면 Control을 만들려고 할때 쓰는 generic.xaml에서 쓸려면 어디에 넣어야 할까?

 

<Setter Property="ItemTemplate" >            
           <Setter.Value>                
               <DataTemplate>
                   <Grid x:Name="grid">
                       <Grid.Resources>
                           <c:FileNameToFilePathImageConverter x:Name="FTFConverter" />
                       </Grid.Resources>

 

그렇다 이런식으로 Grid.Resources같이  패널 안에 리소스를 만들어 쓰면 된다.

Posted by 동동(이재동)
Windows Phone 72011. 3. 21. 13:15

Webclient에서 인터넷에 xml을 다운 받아서 파싱을 하는데 프로그램을 다시 실행시키지 않는한

 

변경된 xml을 다시 읽어 왔을 때 내용이 변경이 되지 않았다..

 

무슨 이야기인가 하면 xml을 온라인에서 읽다가 xml내용이 변경되어서 다시 읽어왔는데

 

다시 읽어온 xml이 변경하기전 data를 넘겨준다는 이야기 이다.

 

아마 내생각에는 Caching  문제로 한번 읽어온 데이터는 간직하지 않나 싶은데?

 

 

 

Random random = new Random();
 
string XmlURL = "http://URL?UnUsed="+random.Next().ToString();

 

그래서 이렇게 URL뒤에 랜덤 파라미터를 붙여서 캐싱을 막아놓았다..

 

이건 머 예전 웹할때 웹 브라우저 캐싱 피할때 쓰는거랑 똑같다…

 

참고 : http://forums.silverlight.net/forums/p/14453/110001.aspx

Posted by 동동(이재동)
미용2011. 3. 18. 11:13

안녕하세요 휴즈플로우 이재동입니다.

요즘 회사내에 샐러드를 드시는분들이 기하 급수적으로 늘으셔셔 이번 포스트는 다이어트에 대해서 포스팅해보았습니다.

회사생활 특히 프로그래머분들은 한자리에 오래 앉아있는분들이 많기때문에 유용한 정보가 되지 않을까 싶습니다.

그리고 잘못된 다이어트 상식들을 제가 바로 잡아 드리겠습니다.

 

* 계단을 많이 오르내리면 다리가 가늘어진다 - yes

계단 오르내리기는 아주 좋은 유산소 운동 중 하나. 다리에 적당히 근육도 생기고 지방도 잘 연소된다고 합니다.

단, 체중이 너무 많이 나가거나 무릎이 좋지 않은 사람은 관절에 무리를 줄 수 있으므로 다른 운동으로 다이어트를 하는 것이 좋습니다.

계단 오르내리기로 다리 살을 빼고 싶다면 난간을 잡지 말고 무릎을 직각으로 세우며 오릅니다.

두 칸씩 오르내리기를 하면 엉덩이 가 ‘업’되는 효과도 얻을 수 있습니다.

근화씨를 비롯한 몇몇분들이 이미 실행을 하고 계십니다.(절대 블러그 안써서가 아님)

 

* 줄넘기를 하면 종아리가 더 굵어진다 - yes
줄넘기는 유산소 운동의 효과를 볼 수 있지만 몸 전체의 근육을 효과적으 로 사용하기는 어려운 운동입니다.

줄넘기를 할 때는 몸 전체의 하중이 종아리에 집중되기 때문에 약간 굵어질 수 있습니다.

예전에 옥상에서 줄넘기 사서 하루에 50~100개씩이나 하던 시절이 있었는데 지금은 가능한지 모르겠군요

1138671491

 

* 운동하다 말면 살이 찐다 - yes
운동을 하다 중단하면 운동으로 생긴 근육이 소실되면서 지방으로 변합니다.(이부분을 찾아보니

지방이 되는것이 아니라 운동량이 줄어 칼로리 소모량이 그만큼 감소해서 체지방이 더 잘쌓이게 되는것이라네요)

그러므로 운동을 멈춰 에너지 소비량이 줄어든 만큼 식사량을 줄여야 살이 찌지 않는다고 합니다.

그러나 먹는 양을 줄이는 것은 쉬운 일이 아니므로 운동을 시작했다면 조금씩이라도 꾸준히 하는 것이 좋습니다.

지방을 연소하는데 필요한 운동시간도 개개인마다 다르므로 자신의 운동 습관을 체크하고 꾸준하게 운동하는 것이 좋습니다.

일반적으로는 20~25분은 해야 그 이후부터 지방이 연소된다고 합니다.

저같은 경우는 한번 헬스장가면 최소 45분은 하는데요 적어도 저같이는 해야한다고 생각합니다.

하지만 다이어트 를 위한 운동이라면 적어도 1시간~1시간 30분은 해야 효과를 볼 수 있다고 하네요

그리고 운동을 처음 하는 사람은 다른 사람들보다 더 오랜 시간 운동해야 지방이 줄어든다고 합니다. ㅠㅠ

성형수술,다이어트_그후

* 걸을 때 팔을 크게 흔들면 팔뚝 살이 빠진다 - yes
소위 말하는 파워워킹. 팔꿈치를 약간 구부리고 허리를 곧게 펴고 보폭을 크게 해서, 자신의 평소 걸음걸이의 2배 정도 빠르기로 걷는 것은 체내 탄수화 물과 지방을 동시에 소비할 수 있는 운동입니다.

팔에 있는 지방뿐 아니라 온몸의 지방 감소를 기대할 수 있다. 30분 정도 지속해야 효과를 볼 수 있습니다.

 

* 운동할 때 땀을 흘리지 않으면 살이 빠지지 않는다 - no
땀과 관계없이 에너지를 쓰면 살은 빠집니다.

운동을 해도 땀이 나지 않는다는 사람들이 있는데 그것은 운동을 너무 하지 않아 땀구멍이 막혔기 때문.

운동을 꾸준히 계속하면 땀의 양이 늘어납니다.

궂이 땀복이나 마스크 같은거 하고 운동하시는분들(거의 아줌마들?) 잘못된 방법이라고 보시면 됩니다.

 

* 담배를 끊으면 살이 찐다 - no
담배의 니코틴 성분은 지방 분해를 활발하게 해줍니다.

따라서 담배를 끊으면 잠시 동안은 살이 찔 수도 있습니다..

그러나 니코틴 성분에 의한 지방 분해 효과는 매우 미미하고, 오히려 장기간의 흡연이 부신 피질 호르몬의 분비를 촉진해 복부 지방의 원인이 된다는 사실!

금연으로 인해 살이 찐다는 것은 처음 한두 달에만 해당되는 얘기일 뿐입니다.

다만 입이 심심할 때마다 담배 대신 과자 등을 먹어 살이 찌는 경우가 많습니다.

제 주의분중에  밥보다 과자를 더 좋아하는 분이 있더라구요 ㅋㅋ

담배1

 

* 과일은 많이 먹어도 살찌지 않는다?  - no

과일의 약 10%가 당질로 중성지방 상승시키고 복부비만을 유발 할 수 있습니다.

 

*나잇살이란 게 정말 있다?  -yes

20대 이후 성장 호르몬,성호르몬 등의 감소로 근육과 기초대사량이 줄어들게 되어 살이 잘 찌게됩니다

제가 여기에 해당하는 거 같습니다.^^

107

 

*단식하면 살 안찌는 체질로 변한다. –no

단식으로 체중이 주는 것은 것은 수분과 근육의 감소 때문이므로,  단식 끝나면 요요현상으로 살이 더 찌게 됩니다.

 

*특정부위만 빠지는 운동방법도 효과가 있다? –no

일반적으로 다리 엉덩이 아랫배 윗배 가슴 얼굴 순서로 살이 붙고 운동과 다이어트로 체중 감량할 때에는 역순으로

얼굴부터 다리 순서로 살이 빠지게 됩니다.

특정부위만 집중적으로 운동한다고 해서 그 부분만 살이 빠지지는 않습니다.

다만 해당부위 근육을 발달시켜 체형교정에 도움이 될 수는 있습니다.


* 운동한 후에 물을 마시면 살이 찐다? –no

물만 마셔두 살이 찐다는 사람들이 있습니다. 그러나 물에는 칼로리가 없기 때문에

살이 찔 수가 없습니다. 오히려 물을 마시면 신진대사가 활발해져 몸에 필요한 물질을

체내에 받아들이고 노폐물을 체외로 내보내는 체내 활동을 활발히 해줍니다.

또한 열심히 땀 흘리고 운동한 뒤에 체중 감량을 위해 1시간 지나서 수분 섭취를 하는

사람들이 있는데, 갈증이 나는데도 참는 것은 몸에 좋지 않습니다.

운동시함에 나가기 전 계체량 측정이 필요한 경우가 아니라면,

운동 중간 중간에 적절히 수분섭취를 해주시는 것이 원활한 신진대사를 도와

다이어트를 함에 있어서도 도움이 되지 결코 살을 찌우지는 않습니다.

물마시기

 

* 술만 먹고 안주를 먹지 않으면 살이 안찐다? –no

사회생활을 하다보면 간혹 술자리가 생기게 마련입니다.

알콜 자체는 저장되는 칼로리는 아니지만 알콜은 다른 영양소들에 비해

제일 먼저 대사되려는 속성이 있어서 음주 전호 섭취한 음식들의 대사를 방해하여

고스란히 지방으로 저장되게 만들죠.

그렇다고 해서, 술을 먹으면서 기름진 안주는 안먹고 마른 안주만 먹는 사람이 잇있는데,

사실 마른 안주들의 칼로리도 만만치 않게 높습니다. 또한 조금이라도 살이 덜 찌기 위해

안주 없이 술만 마시는 여성이 있는데, 대부분의 술은 곡식이나 과일로 만들기 때문에

그 열량을 그대로 간직하고 있어서 무시할 수 없는 칼로리를 지니고 있습니다.

따라서 정말 살을 빼고 싶다면, 가급적 술자리는 피하는 것이 좋습니다.

e0075425_4ab3747824a50

 

* 원푸드 다이어트를 하면 살이 잘 빠진다? –no

 

벌꿀, 사과, 감자, 고구마, 커피 등등... 한가지 음식으로만 먹는 원푸드다이어트는

가장 현혹되기 쉬운 다이어트지만 가장 치명적이라 할만큼 위험한 다이어트입니다.

물론 당장은 한가지 음식만 먹기 때문에 살이 빠집니다. 하지만 평생 한가지 음식만

먹을수는 없으므로, 다시 원래 식생활로 돌아오는 즉시 지금보다 몸무게가 더 늘어나게 됩니다.

저는 샐러드로 시도중인데 다시 늘어나게 될지도 ㅠㅠ 아 어짜피 빠지지도 않았구나!!

 

자~ 잘못된 상식들을 바로 잡으셧나요?

 

앞으로도 서로 좋은 건강 정보들을 공유해서 건강하고 활기찬 휴즈플로우 식구들이 되기를 기원합니다^^

Posted by 동동(이재동)
Windows Phone 72011. 3. 17. 13:25

내가 할려고 했던건

 

 

webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadComplete

d);            

 

이렇게 webclient를 이용해서 이미지 파일을 다운 받아서 isolatedFile에 저장하는거였다.

 

근데 저장하고 파라미터를 어떻게 줄까? 파일이 여러개라면 파일이름이  다 다를텐데

 

그렇다고 전역변수를 이용해서 하나씩 할당도 해볼까 했지만 잘안되었다.

 

 

private void DownloadImage(string url,string fileName)
        {            
            WebClient webClient = new WebClient();
            webClient.OpenReadAsync(new Uri(url), fileName);
            webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);            
            
        }
 
        void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
 
            string fileName = e.UserState.ToString();

 

짠 이렇게 바꾸었더니 훌륭하게 동작이 되었다.

 

webClient.OpenReadAsync(new Uri(url), fileName);
 
에 userToken을 줄수가 있었던것이다.
 
그뒤에 openReadComplete EventArgs에는 저렇게 e.UserState에서 받을수 있다.
Posted by 동동(이재동)
Windows Phone 72011. 3. 15. 17:44

이번에 할려는 일은 About 페이지에 앱 리스트를 쭉 등록시키는일이다.

 

근데 서버로부터 앱리스트를 받고 그걸 뿌려줘야 하는데 xml을 이용하기로 했다.

 

앱은 이렇게 이미지가 나와야 한다.

 

 

description등 과 같은 string이야 xml에서 받아서 파싱하면 땡이지만

 

이미지는? 그래서 테스트 어플을 하나 만들었다.

 

일단 버튼을 하나 만들고

 

Webclient로부터 이미지를 하나 다운 받게 하였다.

 

private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            var url = "http://4.bp.blogspot.com/_HfTuDK39Rv4/SAjoBeqcFtI/AAAAAAAAAbo/UaXaUjD6yTY/s400/cuty.jpg";
            //var url = "http://fc07.deviantart.net/fs27/i/2008/139/9/9/Cuty_Rabbit_by_Willow_San.jpg";
        
            WebClient webClient = new WebClient();
            webClient.OpenReadAsync(new Uri(url));
            webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
        }

 

다운로드가 완료되면

 

 

void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            var resInfo = new StreamResourceInfo(e.Result, null);
            var reader = new StreamReader(resInfo.Stream);
 
            byte[] contents;
            using (BinaryReader bReader = new BinaryReader(reader.BaseStream))
            {
                contents = bReader.ReadBytes((int)reader.BaseStream.Length);
            }            
            
            using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
            {
                if (isf.FileExists("file.jpg") == true)
                {
                    isf.DeleteFile("file.jpg");
                }
                IsolatedStorageFileStream  stream = new IsolatedStorageFileStream("file.jpg", FileMode.OpenOrCreate, isf);                
                stream.Write(contents, 0, contents.Length);                
                stream.Close();
                MessageBox.Show("Finish Download");
            }
        }

 

다운로드가 완료되면 file.jpg를 하나 만들어서 IsolatedStorageFile에 저장을 한다. 그전에 저렇게 StreamResouceInfo와 StreamReader로 파일을 읽는다.

 

private void Button_Click_2(object sender, RoutedEventArgs e)
       {
           using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
           {
               IsolatedStorageFileStream stream = new IsolatedStorageFileStream("file.jpg", FileMode.Open, isf);
               var image = new BitmapImage();
               image.SetSource(stream);
 
               stream.Close();
               xImage.Source = image;
           }
       }

 

자 이제 아까 저장했던 파일을 읽어서 Image Control에 출력해보자…


참고  : http://dotnet.dzone.com/articles/operating-image-files-windows?mz=27249-windowsphone7 

대충 소스 보면 알겠지만 혹시나 모르니 소스를 첨부 한다.



Posted by 동동(이재동)
Windows Phone 72011. 3. 15. 16:24

 

어떤 이벤트를 이용해 마켓플레이스에 접근하기 하는 방법이다

 

ContentIdentfier 에는 AppId를 쓰면 된다.

 

Microsoft.Phone.Tasks.MarketplaceDetailTask mt = new MarketplaceDetailTask();
mt.ContentType = MarketplaceContentType.Applications;
mt.ContentIdentifier = "d04f84f4-ea1e-e011-9264-00237de2db9e";
mt.Show();

 

참고 : http://www.wpseven.de/2010/11/link-to-windows-phone-marketplace-content/

Posted by 동동(이재동)
Windows Phone 72011. 3. 15. 12:58

보통 컬렉션 안의 컬렉션 즉 List문 안에 List문 이 있으면

 

중첩 foreach문을 쓴다.

 

그러면 코드가 길어지고 깔끔해지지가 않는다.

 

foreach (Contact _contact in contacts)
{
    _contact.ID = 0;
    _contact.GroupID = 0;
    _contact.CompanyID = 0;
}

 

이런 For문이 있을때는

 

contacts.ForEach(c => { c.ID = 0; c.GroupID = 0; c.CompanyID = 0; });

 

이렇게 바꾸면 된다.

 

만약 list안의 list를 보고 싶으면

그냥

 

_collectionBooks.Collectionbook.ToList().ForEach(i => i.Collection.ForEach( c => {CheckCollectBookSheetAllCoinCal(c);}));
 

이런식도 된다. ToList()뒤에 foreach 그리고 메소드를 만들어서 깔끔하게 돌렸다.

 

원래는 이런 for문 이였다. ㄷㄷㄷ

foreach (var item in _collectionBooks.Collectionbook)
            {
               foreach (var collect in item.Collection)
                {
         if (collect.Item != null)
            {    
                int haveCollectionCoinCount = 0;
                foreach (var coinInfo in collect.Item)
                {
                    var isHaveCollectionCoin = CollectionCoins.Where(c => c.cid == coinInfo.cid).FirstOrDefault();
                    if (isHaveCollectionCoin != null)
                    {
                        haveCollectionCoinCount++;
                    }
                }
 
                if (haveCollectionCoinCount == collect.Item.Count)
                {
                    SaveCompleteCollectBookSheetHistoryTime(collect.ID);
                }
            }
                }
            }
Posted by 동동(이재동)
Windows Phone 72011. 3. 11. 14:49

Behind에서 특정 큰트롤을 조정(예를 들면 visible)하거나 여러개의 콘트롤을 조정하여 특정 화면을 만들고 싶을때

 

스토리보드처럼 역동적이지 않고 화면을 바꾸고 싶을때 behind에서 일일히 조정하는것보다 VisualStateManager를 쓰

 

면 편하다.

 

image

 

일단 블랜드에 가서 State의 이름을 정한다. 나는 CollectionCoinState로 정했다.

 

다음에 Add State버튼을 눌러서 Add를 한다. 나는 CompleteCollect로 정했다.

 

다음 만든 CompleteCollect를 클릭하면 StoryBoard만들때처럼 Recoding On이라는 메세지와 함께 빨간줄이 쳐진다.

 

이때 자기가 만들고자 하는 상태를 만든다. 컨트롤을 숨긴다던지 아니면 보이게 한다던지

 

다 만들었으면

 

이제 이것을 실행해 보자.

 

Behind에서

 

VisualStateManager.GoToState(this, "CompleteCollect", true);                

 

이렇게 하면 아까 설정했던 상태를 그대로 적용해준다.

 

만약 State를 여러개 만들고 저기 가운데 이름만 바꾸면 여러개를 돌아가면서 바꿀수 있다.

Posted by 동동(이재동)
좋은 프로그램2011. 3. 8. 09:42

인덱싱 해서 하는것인줄 알았는데 아닌거 같다.


바로 찾아진다. ㄷㄷㄷ


Everything search engine

http://www.voidtools.com/

Posted by 동동(이재동)
Windows Phone 72011. 2. 23. 15:05

스토리보드가 실행중인지 보는 메서드는

 

 

GetCurrentState()
로 알수 있다.
 
스토리보드를 Skip 하여 끝에 효과만 보게 할려면
 
SkipToFill();
 
을 쓴다.
 
예제
 
//스토리 보드가 실행중에 페이지가 넘어갈때 StoryBoard를 Skip 한다.
            if (DisappearDescriptionGuide.GetCurrentState() == System.Windows.Media.Animation.ClockState.Active)
            {
                DisappearDescriptionGuide.SkipToFill();
            }

 
Posted by 동동(이재동)
Windows Phone 72011. 2. 23. 11:40

윈폰에서 Back버튼을 눌러도 아무것도 안하거나 특정 반응을 하고 싶게 할때가 있다.

 

back 버튼을 override받아서

 

그때는 그냥 e.Canle = true;로 하면 된다.

 

이런식으로

 

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
        {
            if (dc.Content.IsDescriptionMode == true)

            {
                dc.Content.IsDescriptionMode = false;
                e.Cancel = true;
            }
        }

Posted by 동동(이재동)
Windows Phone 72011. 2. 18. 17:04

이건 wp7쪽에 써야 되는지 모르겠다.

 

html이나 여러 쪽에도 적용되는것인데

 

Name    Character    Code
quot    "                  &quot;
amp    &                  &amp;
apos    '                &apos;
lt    <                     &lt;
gt    >                   &gt;

 

이렇게 쓰인다

 

근데 엔터키를 의미하는 \n을 xml에 입력하면 string값으로 \\n이 넘어오는데

 

이건 어떻게 해야 할지 몰라서

 

DescriptionTextBlock.Text = param.Replace("\\n", "\n");
 
그냥 이렇게 강제로 바꾸었다.
 
나중에 알면 수정해야겠다.

 

참조 : http://kimchulgoon.blog.me/30044443181

Posted by 동동(이재동)
VisualStudio2011. 2. 16. 11:00

물론 기본으로도 잘되어있고 더 좋은 Extensions이 많이 있지만  일단 써본다.

 

CodeMaid

내가 굉장히 좋아하는 extension이다.

원클릭으로 코드를 다 깔끔하게 해준다.(Clean UP)

그리고 지금 내가 보고 있는 코드가 솔루션 익스에서 어디에 있는지도 한번에 찾아준다.

난 코드를 다 짠후 이걸 실행해서 한번 점검한다. ㅋㅋ

 

 

Productivity PowerTools

이것두 유용한게 많지만 난 주로

Pin Tab을 하기 위해서 쓴다.

코딩을 하다보면 내가 사용하는 몇개의 파일만 이동하는데 pib tab으로 설정해두면

파일을 찾느라 왔다갔다 하지 않아도 된다. 아주 편리하다.

그외에 ctrl 키를 이용하여 메소드를 마우스 클릭하면 이동하는것도 있는데

f12가 익숙해서 잘쓰지는 않는다.

 

Utra Find

내가 정말 자주 쓰는 기능이다.

어떤 메소드의 정의를 찾을때 Shift+F12로 찾는걸로는 한계가 있는데

이건 물리적으로 파일을 검색하여 단어가 들어간 모든 것을 찾아준다.

그리고 옵션도 좀더 다양하고 기존 찾기 기능보다 훨신 강력하다


Quick Open File For Visual Studio 2010

큰프로젝트를 하다보면 파일이 너무 많아서 이동하기 쉽지 않은데 단축키도 지원하고

검색만으로 프로젝트를 검색해서 열어준다.


VS10x Code Map v2

코드를 한눈에 볼수 있다. 디폴트로 왼쪽에 나타나며 이쁘게 짤려고 노력중인 나에게 좋은 것 같다.


Posted by 동동(이재동)
Windows Phone 72011. 2. 15. 14:26

이전 포스트에서도 썻지만 이번에 Toolkit에 추가 됨으로 사용법을 알아보자

 

일단 WrapPanel을 사용하기 위해서는 wp7용 toolkit을 다운 받아야 한다.

 

그뒤에 itemsControl을 이용하여 유동으로 생성되게 하면 된다.

 

<Grid x:Name="LayoutRoot" Background="Transparent" >        
        <ScrollViewer HorizontalScrollBarVisibility="Disabled"  HorizontalAlignment="Stretch">
            <ItemsControl ItemsSource="{Binding CollectionBookData}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Border Margin="10" BorderThickness="3" Width="100" Height="150" BorderBrush="White">                                
                                <TextBlock Text="{Binding}" />
                            </Border>                            
                        </StackPanel>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <tk:WrapPanel />
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </ItemsControl>
        </ScrollViewer>
    </Grid>    

 

위에 보면 알겠지만 itemsPanelTemplate에 WrapPanel을 넣었다.

 

data에는 Border로 그렸다.

 

무식하게 비하인드에서 Children.Add로 추가하지 말자

 

image

Posted by 동동(이재동)
Windows Phone 72011. 2. 10. 13:41

Resource로 했을 때는 처음에 로딩을 다 하기 때문에 속도가 느려진다.

 

그래서 웬만하면 Content로 하자…더 나은 퍼포먼스가 난다.

 

그리고 Content와 했을때와 Resource로 했을때 이미지 source를 정의 할때

 

차이점 이 있다.

 

Content로 했을때에는

 

 

<Image Stretch="None" Source="/images/appbar.cancel.rest.png"/>

 

이렇게

 

Resource로 했을때 에는

 

<Image Source="/WP7SampleProject3;component/images/appbar.feature.email.rest.png"/>

 

이렇게 정의 한다.

 

behind코드도 마찬가지이다.

 

참고

http://www.windowsphonegeek.com/tips/wp7-working-with-images-content-vs-resource-build-action

Posted by 동동(이재동)
XNA2011. 2. 8. 20:44

XNA Framework의 역사





XNA는 Microsoft에서 개발한 게임 개발 프레임워크로, 2004년 GDC에서 최초로 프로젝트를 공개하여 2010년 현재 4.0베타에 이르렀습니다. your dream game - build it today - millions may play it tomorrow 라는 슬로건을 가진 XNA는 하드웨어 플랫폼에 의존하는 기존의 코딩방식에서 벗어나 PC뿐만 아니라 Xbox360이라는 게임콘솔, 미디어플레이어인 Zune, 또 현재는 Windows Phone 7까지 지원하고 있습니다.



저는 2007년부터 알게 되었지만, 당시 마케팅프로젝트를 하면서 기존의 게임시장이 철저히 플랫폼시장에 지배되고 있었던데에 반해 플랫폼에 자유로운, 보다 컨텐트에 집중할 수 있는 기술 - 당시에는 부족한 면이 없지 않았지만- 그리고 그 기술에 담긴 뜻이 참 좋았던 기억이 있습니다.



앞으로도 XNA에 대해 다루면서 나오게 되겠지만, 당시에는 XNA에 담긴 큰 뜻에 비해 마켓플레이스라든가, 정책, 라이센스 등 환경적인 요소가 열악했었던 것이 사실이었고 진입장벽이 컸던 것도 사실이었습니다. C#이라는 언어, Xbox라는 플랫폼, 마켓정책, 온라인게임시장의 전통적인 강세, 게임 콘솔 시장에서의 보급율 등은 지금도 마찬가지이지만 그 당시에는 더 큰 무언가였습니다.



또한 기술적으로도 그러했는데 http://blogs.msdn.com/b/ito/archive/2010/03/24/xna-game-studio-4-0-refactoring.aspx 를 인용하자면,

XNA는 1.0당시 Xbox360에서 .Net CF가 돌아가게 된지 고작 4개월이 지난 상태였습니다. 당시 XNA는 윈도우상에서만 가능했기 때문에 자연스럽게 Managed DirectX의 설계를 참고하게 되고, 굳이 따지자면 DirectX 9.0의 랩퍼와 같은 형태였습니다.

이러한 방침은 설계기간을 단축시킬 수는 있었지만, 추후에 Xbox360과 Windows상의 동작에 있어서의 차이점, 예를 들면, RenderTarget2D를 활용하는 차이를 깨닫게 된 때는 이미 API사양을 변경하기에는 늦어버려, 결국 Xbox 360과 Windows에서의 동작의 차이는 그대로 존재하게 되었습니다.

또한 추가한 기능을 제거하는 것이 새로운 기능을 추가하는 것보다 훨씬 더 어렵다는 것을 XNA Game Studio Express 1.0을 릴리즈 하면서 실감하게 되었습니다.

일단 추가된 기능은 사용빈도가 낮아지면 그 동안 동작했던 게임이 돌아가지 않게 됩니다. 이러한 사용빈도가 낮은 API라는 것은 귀찮은 존재로, 아무리 사용빈도가 낮아지더라도 API로 제공하고 있는 이상 해당 API가 동작되는지 여부를 확인하기 위한 테스트를 할 필요가 있습니다. 그리고 이러한 문제는 소수의 XNA팀으로서는 테스트에 드는 시간이 소요되기 때문에 신기능을 추가하는 데에 시간이 적어지면 문제가 발생하기 쉽습니다.
이 글에서도 알 수 있지만, 구조로서의 프로그램이 얼마나 많은 생각을 요하고 또 많은 시행착오를 겪어야 하는지 그 노고가 묻어납니다. 모든것은 상대적이라, 항상 그 목적에 따라 정확히 정의할 필요가 있고 발생하는 Trade-Off에 대해 적절한 선택을 해야합니다. 그런 의미에서 게임개발을 위한 Framework로서의 XNA는 다소 구조적인 접근방식으로 알아보고자 합니다.

출처 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=4325&MAEULNO=541&no=53339&page=1
Posted by 동동(이재동)
Windows Phone 72011. 1. 27. 10:45

링크로 대신한다.


http://www.ittoday.co.kr/news/articleView.html?idxno=17454


박대표는 증강현실을 이용한 동전줍기 게임 포춘코인을 주목해 달라고 말한다.


이부분 완전 부담 100배 ㅠㅠ


더 잘만들어야겠다 ㅠㅠ


Posted by 동동(이재동)
Mobile Web in Asp.net2011. 1. 17. 19:32

msdn에 나온다

 

http://msdn.microsoft.com/ko-kr/library/ms178193(VS.80).aspx

 

하지만

 

쿠키작성에 이렇게 하라고 써있는데

 

HttpCookie myCookie = new HttpCookie("UserSettings");
myCookie["Font"] = "Arial";
myCookie["Color"] = "Blue";
myCookie.Expires = DateTime.Now.AddDays(1d);
Response.Cookies.Add(myCookie);

 

마지막 부분이 틀린거 같다.

 

 //쿠키에 저장
                HttpCookie hc = new HttpCookie("UserInfo");
                hc["id"] = userInfo.Id;
                hc["password"] = userInfo.Password;
                hc.Expires = DateTime.Now.AddDays(1d);
                Response.SetCookie(hc);
 
SetCookie()를 써야 작동이 되는듯하다.
 
읽는 부분은 동일하다
 

if (Request.Cookies["UserSettings"] != null)
{
    string userSettings;
    if (Request.Cookies["UserSettings"]["Font"] != null)
    { userSettings = Request.Cookies["UserSettings"]["Font"]; }
}

 
Posted by 동동(이재동)
iPhone App2011. 1. 7. 13:02

google docs를 이용해서 편리하게 아이패드와 동기화를 해보자.

 

일단 내가 하고 싶었던 일은 내컴퓨터에서 적은 ToDO나 메모를 아이패드에서 실시간으로 보고 싶었다.

 

그래서 EverNote나 어썸 노트를 써보았지만 구글 독스에서 저장한후 꼭 어플의 동기화 버튼을

 

눌러야만 동기화가 되었다

 

하지만 내가 원하는건 구글 독스에서 저장했을때 아이패드를 건드리지 않고 자동으로 refresh 되어서 아이패드에

 

출력하기를 원했다…

 

일단 나는 웹에서 작업하기가 느려서 MS Office와 연동을 해서 사용했다.

 

참고한곳은 여기이며

 

http://pakcw.cafe24.com/1170

 

사용한 프로그램은

 

OffiSync 프로그램이였다.(http://www.offisync.com/download.html)

 

이걸 설치하면 구글 docs와 오피스가 실시간 싱크 된다 굉장이 유용한 프로그램이다.

 

자 이제 내컴퓨터에 준비는 끝났다….

 

아이패드에서 docs.google.com 들어가자 어라? 모바일 버전이다.

 

모바일 버전에서는 일단 EDIT를 할수가 없었고 실시간으로 내컴퓨터에서 쓰는 내용을 동기화 하지 않았다.(당근 수정이 안되기떄문인듯) pc버전으로 웹페이지를 보면 되긴하지만 너무 느림

 

그래서 인터넷 검색결과 구글독스 환경설정에 가서 언어를 영어로 설정하면 EdIT 버튼이 생긴다고 하여서

 

해보니 생겼다….

 

자 이제 내컴퓨터에서 글을 작성하고 아이패드 웹 브라우저에서 편하게 실시간 동기활로 글을 볼수 있게 되었다.

 

이로써 아이패드 활용도가 더 높아지는것인가?

Posted by 동동(이재동)
Windows Phone 72011. 1. 7. 12:53

그냥 무턱 대고 쓰기 보다는 이렇게 class로 정의 하는것이 효율적이다.

 

name도 const로 깔끔하게 정의 하고

 

역시 팀장님은 다른거 같다 ㅋㅋ

 

public class SettingsService
  {
      const string NormalCoinStyleKey = "NormalCoinStyle";
      const string DefaultNormalCoinType = "Basic";
 
      public SettingsService()
      {
          if (IsolatedStorageSettings.ApplicationSettings.Contains(NormalCoinStyleKey) == false)
          {
              IsolatedStorageSettings.ApplicationSettings.Add(NormalCoinStyleKey, DefaultNormalCoinType);
          }
      }
 
      public string NormalCoinStyle 
      {
          get
          {
              return IsolatedStorageSettings.ApplicationSettings[NormalCoinStyleKey] as string;
          }
          set
          {
              IsolatedStorageSettings.ApplicationSettings[NormalCoinStyleKey] = value;
              IsolatedStorageSettings.ApplicationSettings.Save();
          }
      }
  }
Posted by 동동(이재동)
Windows Phone 72011. 1. 6. 21:48

예전 포스트에서도 썻지만 약간 달라져서 다시 쓴다.

 

먼저 이런식으로 notifyPropertyChanged 이벤트 클래스를 하나만든다.

 

public class ItemCoinInfo : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
 
        public ItemCoinInfo()
        {
 
        }
    
        #region TypeProperty
        private ItemCoinType _type;
        /// <summary>
        /// 
        /// </summary>
        public ItemCoinType Type
        {
            get
            {
                return _type;
            }
            set
            {                
                if (value != _type)
                {
                    _type = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("Type"));
                    }
                }
            }
        }
        #endregion TypeProperty            
    
        
        #region CountProperty
        private int _count;
        /// <summary>
        /// 
        /// </summary>
        public int Count
        {
            get
            {
                return _count;
            }
            set
            {
                if (value != _count)
                {
                    _count = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("Count"));
                        PropertyChanged(this, new PropertyChangedEventArgs("DisplayName"));
                    }
                }
            }
        }
 
        private string _name;
        public string Name
        {
            get
            {
                return _name;
            }
            set
            {
                if (value != _name)
                {
                    _name = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("Name"));
                    }
                }
            }
        }
 
        private string _displayName;
        public string DisplayName
        {
            get
            {
                _displayName = string.Format("{0} X {1}", Name, Count);
                return _displayName;
            }           
        }
 
        #endregion MyPropertyProperty                
    }
 
그뒤에는
이것을  다시
public static class ItemList
  {
      public static ObservableCollection<ItemCoinInfo> ItemsInfo { get; set; }
 
      static ItemList()
      {
          ItemsInfo = new ObservableCollection<ItemCoinInfo>();
 
          if (ItemsInfo.Count == 0)
          {
              //todo : 현재는 강제로 넣고 있지만 나중에는 xml에서 읽어올것 without count
              //초기에만 넣는다는 것을 잊으면 안됨 나중에 확장을 생각할것 -jdlee
              ItemsInfo.Add(new ItemCoinInfo { Count = 0, Type = ItemCoinType.FC1, Name = "Fortune Coin" });
              ItemsInfo.Add(new ItemCoinInfo { Count = 0, Type = ItemCoinType.PC1, Name = "Pray Coin" });
              ItemsInfo.Add(new ItemCoinInfo { Count = 0, Type = ItemCoinType.WC1, Name = "Web Coin" });
          }
      }
  }

 

이렇게 만들고

여기 안의 count개수를 이런식으로 linq로 늘리면?

//아이템 개수를 하나 늘린다.          
               var type = (ItemCoinType)Enum.Parse(typeof(ItemCoinType), viewmodel.CoinInfo.Id, true);
               (from p in ItemList.ItemsInfo where p.Type == type select p).FirstOrDefault().Count += 1;              

 

자동으로 이것을 바인딩한 컨트롤은 바뀐다.

Posted by 동동(이재동)
Windows Phone 72011. 1. 5. 13:15
난 처음에 Image를 넣어야 하는줄 알았더니 BitMapImage를 넣어야 하는것이였다.
 
사용하는 부분은 이렇게 이고
ItemImageSource = new BitmapImage(new Uri("/HugeFlow.FortuneCoins;component/Images/item/Coins_9.png", UriKind.RelativeOrAbsolute));            
 
 
 private BitmapImage _ItemImageSource;
        /// <summary>
        /// TODO:아이템 이미지 변경
        /// </summary>
        public BitmapImage ItemImageSource
        {
            get
            {
                return _ItemImageSource;
            }
            set
            {
                _ItemImageSource = value;

                OnPropertyChanged("ItemImageSource");
            }
        }
 
xaml코드에는
<Image Source="{Binding ItemImageSource}"  Stretch="Fill"/>
 
바인딩해서 사용하였다.
 
Posted by 동동(이재동)
VisualStudio2010. 12. 2. 13:27

Tip이라기보단 단축키 모음입니다...

* IntelliSense 제안모드 : Ctrl + Alt + Space (개발자가 임의의 클래스 또는 프로퍼티를 생성하고자 할 때 해당 단축키로 인텔리센스의 제안모드를 On/Off 할 수 있습니다)

* Call Hierarchy : (Ctrl + K , Ctrl + T) or (Ctrl + W or Ctrl + K)

매서드를 호출하는 곳 또는 매서드 내부에서 사용하는 프로퍼티나 매서드 목록을 트리형태로 보여줍니다.

Call To '매서드이름' : 매서드를 호출하는 매서드 목록

Call From '매서드이름" :매서드 내부에서 사용중인 매서드와 프로퍼티목록

* 코드 정의창 : Ctrl + W + D

커서가 있는 매서드나 클래스의 소스를 보여줍니다.

* Highlight된 Text 간의 이동 : Ctrl + Shift + Up , Down

커서를 올려놓으면 생기는 Highlight된 구간을 탐색할 때 사용합니다.

Ctrl + F10 : 현재 커서가 존재하는 곳까지 디버깅을 실행합니다.

----------------------------------------------------------------------------

Visual Studio 에서 Temp Project 만드는 법

Tool -> Options -> Projects and Solutions 에서 Save new projects when created 의 체크를 풀어주시면 됩니다.

그럼 새로 프로젝트 생성할 때 어느 경로에 프로젝트를 만들 것인지 물어보지 않고 AppData 아래에 솔루션을 만듭니다.

이 TempProject는 솔루션을 닫을 때 저장할 것인지 버릴 것인지 물어보고 버린다고 하면 임시폴더에서 이 TempProject를 삭제합니다.

단점으로는 단일 프로젝트만 가능하다는 점과 경로가 필요한 웹어플같은 경우에는 사용할 수 가 없습니다.

---------------------------------------------------------------------------

디버그 중단점 팁!!

중단점에 오른쪽버튼 클릭하고 When Hit... 라는것을 클릭하면

Print a message 라는 check 박스가 있고 이것을 체크하게 되면

메세지를 쓸 수 있습니다.

여기는 문자열이 들어감으로 Debug.WriteLine를 쓴 것처럼 Output에 value값이 출력됩니다.

When Hit를 설정한 중단점이 사각형으로 변하게 되고 이 라인에서는 중단되지않고 넘어갑니다. 그 후 output출력창에 보면 출력값을 확인해 볼 수 있습니다. Debug.WriteLine보다 좋은점은 코드에 불필요한 코딩이 들어가지 않아서 불필요한 부분을 지우는 작업이 필요없다는 것 정도일까요??

--------------------------------------------------------------------------

Debug 타임에 마우스를 올리면 현재 변수에 어떤 값이 들어가 있는지 볼 수 있는데 자세히 보면 옆에 Pin을 꽂을 수 있는 기능이 있습니다.

이렇게 Pin으로 고정시켜두면 다음 디버깅때 마우스를 올려놓지 않아도 값을 확인해볼 수 있습니다. +로 확대한 후에 각 프로퍼티별로도 Pin기능을 사용할 수 있고 밑으로 향하는 화살표를 클릭해서 Comment 도 달수 있는 기능을 제공하고 있습니다.

디버깅중에 핀에서 걸리는 데이터는 마지막 디버그 세션의 데이터를 사용하고 비주얼 스튜디오가 중지되기 전까지 세션이 살아있다고 하네요

-------------------------------------------------------------------------

Todo List 만드는 법입니다

주석으로 //TODO 라고 작성한 후에 Ctrl + W + T 를 누르면 TODO 리스트를 볼 수 있습니다. Tools -> Options 에서 Eniviroment -> Task List 에서 주석에 사용할 token을 정의해서 사용할 수 도 있습니다

------------------------------------------------------------------------

IntelliTrace 를 사용하면 중단점에 걸렸던 내역들을 Stack에 저장해서

어느실행 때 어떤 값이었는 지 확인 할 수 있고 내 컴퓨터에서 실행헀던 디버그 내역을 다른컴퓨터에서 실행해 볼 수도 있습니다.

단 컴파일 가능한 소스코드가 있어야 한다는 단점이 있지만요...

tools -> options -> IntelliTrace 에 가면 trace파일을 저장하는 경로와 저장할 용량의 최대크기 IntelliTrace가 어떤 동작에서 로그를 저장할 것인지에 대한 세팅이 가능합니다.

-------------------------------------------------------------------------

C# 3.5에서는

​IEnumerable<ITest> tests = new List<Test>()

or

IEnumerable<ITest> iTests = null;
            List<Test> tests = new List<Test>();

            iTests = tests;

이런식의 생성이나 할당이 불가능 했지만

IEnumerable을 사용할 때에

C# 4.0에서는 된다고 하네요...

다른것도 가능한지 찾아봐야 겠어요

-----------------------------------------------------------------------------

이상입니다!!

Posted by 동동(이재동)
카테고리 없음2010. 11. 22. 15:50

일단 바보 같이 View에서 Add View를 이용해서 만들었었다.

 

그러면

예를 들어서 result.aspx View를 만들었는데

 

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
 
<asp:Content ID="resultTitle" ContentPlaceHolderID="TitleContent" runat="server">
    Result
</asp:Content>
 
<asp:Content ID="resultContent" ContentPlaceHolderID="MainContent" runat="server">
 
    <h2>Result</h2>
 
</asp:Content>

 

이렇게 자동으로 만들어 주면

 

이걸 shared 폴더에 Site.Master 페이지에

<li><%: Html.ActionLink("Result", "Result", "Home")%></li>

이렇게 넣었었다..

 

그러면 메인 페이지에

 

image

 

 

이렇게 버튼이 나온다… 근데 클릭을 하면 에러가 날것이다.

 

한가지를 더 해야 한다.

 

바로 Controller 에 이걸 추가 해야 한다.

 

public ActionResult Result()
       {
           return View();
       }

 

그러면 정상적으로 페이지가 추가되고 작동된다.

Posted by 동동(이재동)
Windows Phone 72010. 10. 20. 17:08

휴즈플로우 게시판에 올릴 내용이기 때문에 존댓말로 쓴다.~ ㅋㅋ

 

제목을 이팀장님의 말을 빌려 거창하게 썻지만 사실 별거 아닙니다~

 

ToolBox 어플은 현제 랜덤 넘버나 월드 홀리데이 같은 단일 프로그램의 dll만 추출하여 레퍼런스 참조를 하여 쓰이고 있

 

었으며 예전에는 하나의 솔루션에 각 프로그램의 프로젝트들을 로드 하여 사용하고 있었습니다.

 

하지만 하나의 솔루션에서 프로젝트를 로드 하여 deploy 하는 방법은 폰에서 사용할 때 하위 프로젝트들도 모두 depoly

 

가 되어서 폰에 10개의 어플들이 각각이 등록이 되었습니다.~ 그래서 하나의 어플만 등록되도록 프로젝트 대신 각각의 dl

 

l들 추출한 뒤 deploy 를 하여 하나의 dll로 만들어서 배포 하는 형식으로 사용했었습니다.

 

하지만 다국어 리소스 작업을  한 후 에서 각각의 dll을 추출하여 deploy를 하여 실행해보았지만 다국어 리소스 지원이 되

 

지 않았습니다. 하지만 솔루션에서 프로젝트를 로드 하여 사용된 방법에서는 작동을 잘하는 것이였습니다.

 

하지만 이것을  사용할 수가 없었던 이유가 위에서 설명한 것 와 같이 모든 프로젝트 프로그램들이 deploy가 되는 문제가

 

생기기 때문에 사용할 수 없다고 판단 하여서 dll로드 하는 방식에서 다국어 리소스를 지원 하는 방법을 찾기 위해 인터넷

 

을 마구 돌아다녔습니다 ㅠ.ㅠ 근데 윤진씨와 머리도 식힐 겸 음료수 먹으러 갔다가 해결법을 찾았습니다~(윤진씨짱)

 

생각해보면 마켓에 올리는것은 xap파일만 올리면 되는 것이기 때문에 아까 프로젝트를 로드하는 형식으로 한 방법으로

 

컴파일 한뒤 xap 파일만 폰에 로드하면 되는것이였습니다.

 

저는 항상 무조건 하나의 toolbox.dll로 만들어야 된다고만 생각하다보니 예전 방식을 고수 했던것이였죠~

 

생각의 전환이 이래서 필요하나 봅니다~^^ 물론 폰으로 디버깅이 되지는 않지만 그건 각각의 단일 솔류션에서 하면 됩니

 

다~

Posted by 동동(이재동)
Windows Phone 72010. 10. 19. 14:17

예전 WPF 시절에도 했었지만 윈폰도 똑같이 하면 된다.

 

기본국가 변경법

-폰에서 바꾸는법: 폰에서 Settings에서 region& langiage에서 display language 를 바꾼후  위에 restart 버튼을 누른다.

-프로젝트에서 바꾸는법 : 솔루션의 프로퍼티에서 Assembly Information에서 Neutral Language를 변경한다.

 

국가를 변경 하였으면 이제 리소스를 등록하자

 

일단 리소스로 빼었으면 AppResources.resx(msdn 따라서 이름지음)  에 영문 리소스가 등록되어 있을것이다.

 

여기서 영국 리소스를 한번 등록시켜보자.

 

똑같이 리소스 등록을 하는데 파일명을 AppResources.en-GB.resx 이렇게 주었다.

 

뒤에 en-GB가 붙었는데 각나라 별로 국가culture를 보고 싶으면

 

http://johnlivingstontech.blogspot.com/2010/02/localizing-resources-in-silverlight.html

 

여기를 참고하고 현재 윈폰에서 지원하는 국가는 6개 니깐 6개만 만들어 빼면 된다.

 

Deutsch(독일) de-DE

English(United Kingdom) (영국) – en-GB

english(United States) –en-US 이건 기본이니 안해도 된다. 위에 AppResources에 빼지 않았던가

espanol(스페인) es-ES

francais(프랑스) fr-FR

italiano(이탈리아) it-IT

 

자 이제 파일들을 추가 하였으면 작동하는지 보자.

 

어라? 작동을 안하네?

 

확인해보니 지원하는 국가 를 프로젝트 csproj 파일에 추가 시켜야 했다.

 

<SupportedCultures>
    en-GB;de-DE;
</SupportedCultures>

 

여기에 이런식 으로 6개를 등록시키면 제대로 동작한다.

Posted by 동동(이재동)
Windows Phone 72010. 10. 18. 15:55

자람다식을 잘쓰면 코드양을 효율적으로 줄일수 있다.

 

CountryList.ForEach(c =>
                {
                    if (c.IsChecked == true)
                    {
                        saved.Add(c.CountryCode);
                    }
                });

 

이건 기본 적인것이다.

 

반드시 List만 되는거 같다. 옵저버블이나 머 기타 Enumerator가 있는것이면 다된다고 생각했으나 안되는듯?

 

람다식에는 식 람다랑 문 람다로 나뉜다.

 

자세한건 msdn을 참고

http://msdn.microsoft.com/ko-kr/library/bb397687(VS.90).aspx

 

하지만 이런거는 직접 사용해보면서 터득하는게 제일 인거 같다.

Posted by 동동(이재동)
Windows Phone 72010. 10. 10. 17:55

일단 내가  처리해야 할 문제는 그것이였다.

 

트위터에서 로그인이 Success가 됬는지 안됐는지 체크 하는거였는데 이게 타이머로 되어있어서(LG DLLㅠ.ㅠ)

 

그래서 Success 여부를 판단하여 UI 즉 VIew딴을 바꾸는것이였다.

 

일단 Twitter Manager 클래스가 있고 거기에서 성공하면 클래스를 호출한곳(즉 VIew딴) 에서 성공이 되었는지 안되었는지  아는 방법이다.

 

즉 아주 쉽게 말해서

 

A라는 Class 가 있고 그안에 Test라는 Bool형 변수가 있는데 이것이 변경이 될때 그때 이벤트가 발생하여 알려주는것이다.

 

일단 이벤트를 발생해야 하기 때문에 살펴보자 나는 bool을 이용하였지만 샘플은 string을 이용했다(똑같다)

 

이벤트 args를 만들자

 

MyEventArgs.cs

 
    public class MyEventArgs : EventArgs
    {
        private string msg;
 
        public MyEventArgs(string messageData)
        {
            msg = messageData;
        }
        public string Message
        {
            get
            {
                return msg;
            }
            set
            {
                msg = value;
            }
        }
    }

 

 

그리고 이 이벤트를 등록하는   쿨래스를 만들자.

 

HasEvent.cs

public class HasEvent
    {
        public event EventHandler<MyEventArgs> sampleEvent;
 
        public void DemoEvent(string val)
        {
            EventHandler<MyEventArgs> temp = sampleEvent;
            if (temp != null)
            {
                temp(this, new MyEventArgs(val));
            }
        }        
    }

 

이제 SampleEvent가 등록되었으니 일반 이벤트랑 똑같이 쓰면 된다~ 와우

 

이 이벤트를 사용하는 예제를 보자

 

MainPage.cs

 

public partial class MainPage : PhoneApplicationPage
   {
       // Constructor
       public MainPage()
       {
           InitializeComponent();
           HasEvent he = new HasEvent();
           he.sampleEvent += new EventHandler<MyEventArgs>(he_sampleEvent);
           he.DemoEvent("true");            
       }
 
       void he_sampleEvent(object sender, MyEventArgs e)
       {
           MessageBox.Show(e.Message);
       }
   }

 

이렇게 이벤트를 줘서 만약 내가 어떤 시기에 특정 메소드를 실행시키고 싶거나 변경하고 싶다면

 

이렇게 이용하면 된다.

 

참고  :  http://msdn.microsoft.com/ko-kr/library/db0etb8x.aspx

'Windows Phone 7' 카테고리의 다른 글

[wp7] Localization Resource 국제화 하는법  (0) 2010.10.19
[wp7] 람다식을 잘쓰자.  (1) 2010.10.18
[wp7] viewbox  (0) 2010.10.08
[wp7] behind에서 application bar 만들기  (0) 2010.10.07
[wp7] Enum 정리  (0) 2010.10.05
Posted by 동동(이재동)