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

  1. 2013.01.24 [wp8] 솔루션 configation을 이용해서 #if 문 활용법~
  2. 2012.12.10 [wp8] wp8에서 파일 읽고 쓰기
  3. 2012.12.06 [wp8] ViewModel에서 Applicaionbar를 변경해보자.
  4. 2012.10.25 XCode와 Eclipse에 적합한 Source Control?
  5. 2012.10.18 [wp8] Generic 형식 전역(global)에서 사용하기
  6. 2012.08.27 [silverlight] 버튼 더블클릭막기 1
  7. 2012.08.24 [Silverlight] 시티은행 WorkBench (2012.06~2012.09)
  8. 2012.06.05 2012년 6월 5일 비쥬얼 스튜디오 세팅
  9. 2012.06.01 [포트폴리오] WindowPhone7 App Mnet (Hugeflow 2012.3~2012.5)
  10. 2012.05.31 [포트폴리오] Hugeflow 2012.04~05 Surface 현대 Bluelink (2012 5월 부산 모터쇼 출품) 1
  11. 2012.05.18 디아블로 수도승 스킬 트리
  12. 2012.05.10 [surface] SurfaceInkCanvas 컨트롤에서 Brush Size 조절법
  13. 2012.05.10 [surface] ScatterViewItem Content내에서 Width,Height 바꾸기
  14. 2012.05.09 [wp7] 프로그램 종료 하고 싶을때
  15. 2012.05.04 [surface] 코드로 만든 Fade out Control 2
  16. 2012.04.27 [surface] ContentControl에서 ContentPresenter의 활용
  17. 2012.04.26 [surface] 해당 UserControl만 스크린샷(캡쳐) 하기
  18. 2012.04.25 [surface] Media.Brush를 Media.Color로 Convert 하는 법
  19. 2012.04.25 [surface] generic.xaml의 x:Name을 잡아내서 Control안에서 조정하기
  20. 2012.04.25 [surface] Control만들때 OnApplyTemplate()이 호출되지 않을때
  21. 2012.04.05 [wp7] ViewModel에서 View로 바로 접근하기
  22. 2012.03.22 [wp7] 별점 컨트롤 (Rating Control)
  23. 2012.03.22 [wp7] 강제로 소수점 표현하기
  24. 2012.03.21 [wp7] MarqueeTextBlock Control
  25. 2012.03.14 [wp7] SplashImage(BackgroundImage) 화질을 좋게 해보자 (그라데이션 계단현상 제거)
  26. 2012.03.13 [wp7] ListBox에서 해당 Item의 Cell만 DataTemplate 바꾸기
  27. 2012.03.08 [wp7] 리스트 컨트롤에서 Cell 순서를 아이폰처럼 바꾸어 보자. List ReOrder
  28. 2012.03.06 [wp7] 공용으로 쓰는 Converter는 App.xaml에 보관하자.
  29. 2012.02.23 [Potfolio] Window Phone 7 App 코레일 공식 앱 "글로리" (Hugeflow 2011.12~ 2012.2) 1
  30. 2012.02.23 [wp7] ConverterParameter 사용하기
VisualStudio2013. 1. 24. 15:16

Debug일때와 Release일경우는

 

#if DEBUG

 

#else

 

#endif

 

이런식으로 자주 쓴다

 

하지만 그외에 몇개를 더 만들고 싶다면

 

image

 

image

 

이런식으로 만든후

 

솔루션 익스플로러에서 해당 프로젝트 Property Page를 연다(솔루션 속성을 여는게 아니라 프로젝트 속성을 열어야 함)

 

그뒤 Build-Conditional compliation symbos뒤에 ;이름을 추가한다.(;MAPP) 대문자가 좋음

 

그뒤에 #if MAPP 를 써보자~ ㅎㅎ

Posted by 동동(이재동)
Windows Phone 82012. 12. 10. 12:35

 

일단 저장부터 ㅋ

private async Task FileSave(MemoryStream stream)
     {
         IStorageFolder applicationFolder = ApplicationData.Current.LocalFolder;
         IStorageFile storageFile = await applicationFolder.CreateFileAsync(Const.LocalPlaylistFileName, CreationCollisionOption.ReplaceExisting);
         using (Stream fileStream = await storageFile.OpenStreamForWriteAsync())
         {                
             stream.Seek(0, SeekOrigin.Begin);
             await stream.CopyToAsync(fileStream);
             await fileStream.FlushAsync();
             stream.Dispose();
         }

 

로드하는부분

public async Task LoadAlbums()
       {
         
           IStorageFolder applicationFolder = ApplicationData.Current.LocalFolder;
 
           IStorageFile storageFile = await applicationFolder.GetFileAsync(Const.LocalPlaylistFileName);
 
           IRandomAccessStream accessStream = await storageFile.OpenReadAsync();
 
           using (Stream stream = accessStream.AsStreamForRead((int)accessStream.Size))
           {
               var o = _serializer.ReadObject(stream);
               LocalPlaylist = o as ObservableCollection<LocalMyAlbum>;
           }
       }

 

일단 윈7이랑 조금 달라졌다.

 

참조한곳이랑은 약간 다르게 구현~

 

참고한곳 : http://dotnetapp.com/blog/2012/08/02/windows-phone-8-shared-core-with-windows-8-file-io/

Posted by 동동(이재동)
Windows Phone 82012. 12. 6. 16:25

일단 내가 하고자 하는것은 멜론 플레이 리스트에 수정모드와 일반모드가 있다.

 

일반모드에서 ApplicationBar에 편집 버튼을 누르면 ApplicationBar에 편집을 위한 다른 버튼이 생기게 하는게 목표다(삭제라든지)

 

일단 behind에서 하면 아주 쉽지만 ViewModel에서 하는방법은 없을까?.. 모르겠다..

 

그래성 생각한 방법이 IsReorderEnabled 란 프로퍼티를 만들고

 

 

 

private bool _isReorderEnabled;
 
       public bool IsReorderEnabled
       {
           get
           {
               return _isReorderEnabled;
           }
           set
           {
               Set<bool>(ref _isReorderEnabled, value); 
           }
       }       

 

그냥 View Behind코드에서 변경되었을때 이벤트를 걸었다.

 

public partial class PlaylistDetailView : PhoneApplicationPage
    {
        public PlaylistDetailView()
        {
            InitializeComponent();
            this.Loaded += PlaylistDetailView_Loaded;
        }
 
        private void PlaylistDetailView_Loaded(object sender, RoutedEventArgs e)
        {         
            (DataContext as PlaylistDetailViewModel).PropertyChanged += PlaylistDetailView_PropertyChanged;
        }
 
        void PlaylistDetailView_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            if (e.PropertyName == "IsReorderEnabled")
            {
                if ((DataContext as PlaylistDetailViewModel).IsReorderEnabled == true)
                {
                    ApplicationBar = Application.Current.Resources["PlayListDetailEditAppBar"] as ApplicationBar;
                }
                else
                {
                    ApplicationBar = Application.Current.Resources["PlayListDetailAppBar"] as ApplicationBar;
                }
            }
        }
    }

 

머 이런방법도 있다 ㅋㅋ

Posted by 동동(이재동)
언어2012. 10. 25. 10:51

.NET 쪽이야 워낙 TFS가 독보적이라 말할 필요가 없지만

 

예전 아이폰 개발할때는 Xcode 소스관리를 어떻게 해야 했었는지 고민을 많이 했었다.

 

맥에서도 TFS를 사용할수 있나 싶어서 조사도 해봤지만  결국 그냥 일반적으로 쓰는 SVN을 사용하기로 하고

 

툴도 제일 윈도우에서 쓴거와 같은 툴을 구해서 쓴 기억이 난다.

 

현재 내가 알고 있는 소스관리는 CVS,SVN,GIT 정도 인데

 

CVS야 이제 거의 안쓰니 설명할 필요가 없을꺼 같고

 

SVN은 정말 보편적으로 많은 사람들이 쓰는것이라 Xcode,이클립스에서 완벽 지원하며

 

Tool도 Mac용,Windows용으로 정말 많다

 

대부분의 개발자가 사용가능하며 단일 프로젝트 관리하기 좋음

 

커밋하면 중앙 저장소에 바로 저장

 

단점은 서버를 설치해야함,여러사람이랑 작업시 가끔 머지가 두려움

 

GIT는


개개인의 로컬 저장소가 있어서 커밋을 하면 로컬 저장소에 저장이 된 후 push를 해야 중앙 저장소에 저장이 됨, 때문에 중앙

 

저장소에 의존적이지 않음

 

핵심은 로컬 저장 관리!! 그래서 일단 로컬에 저장하고 서버에 push하는 형태

 

GIT가 좀더 많은 기능을 지원하지만 이클립스 플러그인에서 불안하다고함

 

하지만 대세가 GIT이고 명령어 모드에 익숙해지면 GIT가 잇점이 많다고 생각함

 

물론 서버가 있어야함

 

GitHub와 google code 는 오픈소스라 프로그래밍계의 소셜이라 생각하는데 회사프로젝트면 사용 안하는게 좋다고 생각


물론 서버는 필요 없음

 

결론은 무난하고 여러사람이 같이 개발하는것이 아니라면 svn이 낫고

 

대새를 따르거나 여러사람이 함께 작업하고 여러가지기능을 사용하는것이라면 git가 낫다고 생각

 

나중에 GIT는 꼭 써봐야겠다는 생각이 들었다.

Posted by 동동(이재동)
Windows Phone 82012. 10. 18. 11:18

원래 Generic 형식은 Global에서 사용이 되지 않았다.

 

하지만 .net framework 4.0 이상부터는 dynamic 을 지원한다. ㅋㅋ

 

윈폰7에서는 Compact net framework 라 안되었지만 windows 8 phone은 강력해졌다.

 

예를 들어 이렇게 Webclient 에서 Json Data를 받으면 알려주는 제네릭 Event Handler를 만들었다고 하자

 

public class CompleteEvent<T>
   {
       public event EventHandler<JsonDataEventArgs<T>> completeEvent;
 
       public void JsonDataEvent(T jsonData)
       {
           EventHandler<JsonDataEventArgs<T>> temp = completeEvent;
           if (temp != null)
           {
               temp(this, new JsonDataEventArgs<T>(jsonData));
           }
       }
   }
 
   public class JsonDataEventArgs<T> : EventArgs
   {
       T _jsonDataDict;
 
       public JsonDataEventArgs(T data)
       {
           _jsonDataDict = data;
       }
 
       public T XmlData
       {
           get
           {
               return _jsonDataDict;
           }
           set
           {
               _jsonDataDict = value;
           }
       }
   }

 

이제 이것을 전역변수로 정의 해보자

 

api.cs에

 

public CompleteEvent<dynamic> ce = new CompleteEvent<dynamic>();

 

이렇게 되면 이 클래스의 CompleteEvent를 어디서든 사용할 수가 있다 CompleteEvent<T>형식으로는 전역변수를 사용할수가 없다

Posted by 동동(이재동)
silverlight2012. 8. 27. 12:48

더블클릭시 클릭 이벤트가 2번 일어나기때문에

 

시간차를 줘서 이벤트가 2번 일어나지 않도록 변경

 

더블클릭해도 두번째 클릭은 return 되기때문에 한번 클릭한 효과과 동일한 효과를 낸다.

 

       System.Windows.Threading.DispatcherTimer timer;
        bool singleClick = false;

 

        /// <summary>
        /// 로드 이벤트
        /// </summary>
        private void CIFControl_Loaded(object sender, RoutedEventArgs e)
        {
            timer = new System.Windows.Threading.DispatcherTimer();
            timer.Interval = TimeSpan.FromMilliseconds(500);
            timer.Tick += new EventHandler(timer_Tick);

         }

        void timer_Tick(object sender, EventArgs e)
        {
            timer.Stop();
            singleClick = false; // expires
        }
       

private void btnOK_Click(object sender, RoutedEventArgs e)
        {
            if (!singleClick)
            {
                timer.Start();
                singleClick = true;
                Debug.WriteLine("Click");
            }
            else
            {
                Debug.WriteLine("Double Click");
                return;
            }

      }

'silverlight' 카테고리의 다른 글

심플한 MVVM 패턴 스타일 ~  (0) 2010.05.19
[silverlight] silverlight 3 정식버전 설명 정리한거  (0) 2009.07.13
졸작때 쓴 파일들  (0) 2008.12.18
내 졸작 제출용 파일  (0) 2008.10.29
silverlight rc1 정식버전  (0) 2008.10.15
Posted by 동동(이재동)
포트폴리오2012. 8. 24. 13:56

인천 예술회관역 시티은행에서 한 프로젝트


고객용 WorkBench와 직원용 WorkBench가 있으며 둘다 실버라이트로 개발 되었다.


고객용은 좀더 UI좀이 화려하고 그렇다. 


짧은 기간동안 업무적으로도 많이 알아야하고 은행업무라 ㅠㅠ


실수도 용납하지 않기때문에 철저하게 테스트해야 한다.


기존 A+통장만 있던 프로그램에서 수수료 제로통장을 추가하였으며 로직은 a+ 와 비슷하게 구현을 하였다.


세세한 수정도 있었고 직원용 고객용 2가지 프로그램을 동시에 분석해야하고 완벽히 이해해야 가능한 프로젝트이기


때문에 기술적인 요소보다 코레일 처럼 업무적인 프로세스가 더 중요한 프로젝트 였다.


그리고 은행업무라 인천 까지 가서 내부망으로 해야하는것이라 혼자 가서 밥도 혼자먹고 약간 쓸쓸한 프로젝트였기도 하다.


하지만 깔끔히 마무리 되어서  다행이다. 


 

 

 

Posted by 동동(이재동)
VisualStudio2012. 6. 5. 14:52

시티은행에 파견와서 새로 설치해야함

Exported-2012-06-05.vssettings

Posted by 동동(이재동)
포트폴리오2012. 6. 1. 16:58

코레일처럼 혼자 작업한게 아닌 회사 대표형과 Mnet 개발자분 디자이너 이렇게 만든 어플리케이션입니다.

 

초반에 내가 다하는걸로 계획되어 있었는데 코레일 유지보수 계약건으로 프레임워크는 대표형이 하고 그뒤로는 같이 공동으로 제작한 앱입니다.

 

각종 스트리밍 서비스가 가능하며 Mnet서버와는 웹서비스를 통해 통신하고 Json으로 파싱하는 작업을 하는등 여러가지 작업이 들어갔습니다. 대표형의 엄청난 프레임워크로 인해 손쉽게(?) 개발할수 있었습니다. 노가다 API도 직접 다 만드심 ㅋㅋ

 

Mnet개발자분도 실력이 출중하셔셔 두 고급개발자들과 함께할수 있었던 그런 프로젝트였던거 같습니다.

 

초반 기술검증이 필요해서 두려움에 떨었는데 의외로 윈폰7 스트리밍 서비스가 쉬워서 금방 했던거 같습니다

 

그외 UI 작업 아이폰처럼 곡 정렬이라든지(없어서 외부 라이브러리를^^) 여러가지 아이폰에는 당연히 포함되어 있는 컨트롤이지만 윈폰에는 첨부터 만들어야 하는게 조금 있어서 적용한다고 약간 고생하였고

 

FortuneCoin이후로 완벽 MVVM과 Ninject 를 많이 써본 프로젝트였던거 같습니다. 소스분석이 조금 어려웠다는 ㅠㅠ

 

앱이 올라갔을때 회식도 있어서 굿!!! 코레일은 그런거 없어서 아쉽 ㅠㅠ 고생은 젤 많이 했는데

 

Mnet 앱 URL: http://www.mnet.com/mnet/mobile/WinPhoneApp.asp

마켓플레이스 URL: http://www.windowsphone.com/ko-KR/apps/f278de3c-fa89-4465-a1ab-7f0703052deb

 

 

 

 

 

 

 

 

 

 

 

 

Posted by 동동(이재동)
포트폴리오2012. 5. 31. 17:33

로봇캅 폴리 이후 맡은 프로젝트로써 2012년 부산 모터쇼에서 실제 surface에서 사용한 프로그램 입니다.

 

전체적인 PM은 이길복 이사님이 하셧고 저는 안에 InkCanvas (Pallete Control)과 SMS 키보드 , Email 키보드 컨트롤을 제작

 

과 팔렛트 모드일시 사진의 크기가 최대로 커지면서 수정가능하고 스탬프도 사용할수 있으며 가장자리에서 팔렛트 이동시에 오

 

른쪽 팔렛트 버튼이 보이도록 위치 수정등 여러가지 작업을 하였습니다.

 

부산 모터쇼 에서 실제 가서 여러사람들이 제가 참여한 프로젝트 프로그램을 만지는 것을 보며 좋아하니 뿌듯한 마음이~

 

부산 모터쇼 동영상은 나중에 링크로~

 

 

 

 

 

Posted by 동동(이재동)
기타2012. 5. 18. 15:22

링크로 대신


http://blog.naver.com/neocannon08?Redirect=Log&logNo=130138288950

Posted by 동동(이재동)
Surface2012. 5. 10. 17:47

사용자가 터치하는 Brush 크기를 조절하고 싶어서

SurfaceInkCanvasContainer.DefaultDrawingAttributes.Height = 7;
SurfaceInkCanvasContainer.DefaultDrawingAttributes.Width = 7;

이렇게 height,width값을 조정하였지만 적용이 되지 않았다.

문제는

SurfaceInkCanvasContainer.UsesTouchShape = false;

이것이 true로 되어 있어서였다.(기본이 True)

이걸 false로 하면 유저의 손가락 크기에 굵기가 달라지는게 아니라 일정하게 유지되도록 변경된다.

Posted by 동동(이재동)
Surface2012. 5. 10. 11:05

우왕 이것때문에 삽질 많이 했다.

일단 내가 하고 싶었던건 ScatterViewItem내 컨트롤에서 버튼을 누르면 MaxWidth,MaxHeight로 변경하고 싶었다.

근데 이상하게 Content내에서 사이즈를 변경하면 외부 ScatterViewitem 크기는 변경되지 않고 내부의 Content만 크기가 커졌다. 그래서 그냥 확대되는 느낌? 사이즈는 그대로 두고..

그래서 Scale로 어떻게든 해볼려고 했지만 역시 리사이즈할때도 문제이고 근본적인 원인이 해결되지 않아서

길복이 형한테 물어봤더니 길복이형이 이미 구현해 놓은 코드가 있었다.

 

if (Owner != null)
           {
               var container = Owner.GetContainer(this);
               if (container != null)
               {
                   container.Width = this.MaxWidth;
                   container.Height = this.MaxHeight;
               }
           }

 

대충 이런코드다 Owner라는게 있어서 Container를 잡을수가 있다!!!!!

최고다… 이걸 몰랐으면 엄청 고생했을듯

Posted by 동동(이재동)
Windows Phone 72012. 5. 9. 16:20

내가 알고 있는 방법은 2가지이다.

1. exception을 발생해서 종료하는방법으로 추천하지 않는다.

2. backStack을 모두 제거해서 종료하는 방법

이방법일경우는 네비게이션으로 어디든지 돌아다니다가 백백으로 오기 힘든경우 막 꼬이고 이런경우 특히 코레일 같은!!!

때 유용하다. 메인 페이지에 이 코드를 삽입하였다. 그래서 어디서든 메인페이지에서 back을 누르면 종료가 된다.

 

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
       {
           if (NavigationService.CanGoBack)
           {
               while (NavigationService.RemoveBackEntry() != null)
               {
                   NavigationService.RemoveBackEntry();
               }
           }
           base.OnNavigatedTo(e);
       }

참고 : http://stackoverflow.com/questions/5473972/how-to-exit-from-the-application-in-windows-phone-7

Posted by 동동(이재동)
Surface2012. 5. 4. 12:00

Xaml이 아닌 코드로 만들어서 범용적이고 실용적으로 사용 가능

public static class FadeAnimationControl
{
    public static void Fade(UIElement target, double ValueFrom, double ValueTo, double Duration)
    {
        DoubleAnimation da = new DoubleAnimation();
        da.From = ValueFrom;
        da.To = ValueTo;
        da.Duration = TimeSpan.FromSeconds(Duration);
        da.AutoReverse = false;

        System.Windows.Media.Animation.Storyboard.SetTargetProperty(da, new PropertyPath("Opacity"));

        System.Windows.Media.Animation.Storyboard.SetTarget(da, target);

        System.Windows.Media.Animation.Storyboard sb = new System.Windows.Media.Animation.Storyboard();
        sb.Children.Add(da);

        EventHandler eh = null;
        eh = (s, args) =>
        {
            //target.Visibility = Visibility.Collapsed;
            sb.Stop();
            sb.Completed -= eh;
            target.Opacity = ValueTo;
        };
        sb.Completed += eh;

        sb.Begin();
    }
}

참고 : http://forums.create.msdn.com/forums/p/87462/525024.aspx

Posted by 동동(이재동)
Surface2012. 4. 27. 10:40

일반적으로 Button(ContentControl 상속)과 같이 Content를 넣으면 이를 표현해주는데 Text를 넣으면 Text를 이미지를 넣으면 Image를 이런식으로 알아서 표현해준다.

이를 구현하기 위해서

ContentControl을 상속받은 컨트롤을 하나 만들고

 public class VirtualKeyboard : ContentControl

해당 컨트롤 xaml에

<ContentPresenter Content="{TemplateBinding Content}" Width="300" Height="300"/>

이렇게 만들어 놓고

            <c:VirtualKeyboard >
                <c:VirtualKeyboard.Content>
                    <Image Source="Images/sample.jpg"/>
                </c:VirtualKeyboard.Content>
            </c:VirtualKeyboard>

 

이런식으로 Content를 주입하면 Image가 나타난다.

아주 기초적인것이지만 활용하면 편하니 활용하길~

참고: http://www.mediamob.co.kr/infoland/blog.aspx?id=278585

Posted by 동동(이재동)
Surface2012. 4. 26. 10:08
private void Snapshot(UIElement source, double scale, int quality)
       {
           double actualHeight = source.RenderSize.Height;
           double actualWidth = source.RenderSize.Width;

           double renderHeight = actualHeight * scale;
           double renderWidth = actualWidth * scale;

           RenderTargetBitmap renderTarget = new RenderTargetBitmap((int)renderWidth, (int)renderHeight, 96, 96, PixelFormats.Pbgra32);
           VisualBrush sourceBrush = new VisualBrush(source);

           DrawingVisual drawingVisual = new DrawingVisual();
           DrawingContext drawingContext = drawingVisual.RenderOpen();

           using (drawingContext)
           {
               //drawingContext.PushTransform(new ScaleTransform(scale, scale));
               drawingContext.DrawRectangle(sourceBrush, null, new Rect(new Point(0, 0), new Point(actualWidth, actualHeight)));
           }
           renderTarget.Render(drawingVisual);

           JpegBitmapEncoder jpgEncoder = new JpegBitmapEncoder();
           jpgEncoder.QualityLevel = quality;
           jpgEncoder.Frames.Add(BitmapFrame.Create(renderTarget));

           using (FileStream stm = File.OpenWrite(@"C:\test2.png"))
               jpgEncoder.Save(stm);
       }

일단 소스는 이렇다 source에 해당 usercontrol을 넣는다.

만약 DrawingVisual에 넣어서 rectangle을 만들지 않으면 해당 유저컨트롤만 찍히는게 아니라 전체가 찍힌다.

전체가 찍히긴하지만 해당 컨트롤만 나옴

참고 :

http://www.grumpydev.com/2009/01/03/taking-wpf-screenshots/
Posted by 동동(이재동)
Surface2012. 4. 25. 14:41

반대로 Media.Color를 Brush로 바꾸는건 쉬웠지만

 

Brush를 Color로 바꾸는건 힘들었다.

 

var temp = ((e.Source as ListBox).SelectedItem as Brush);
         SolidColorBrush c = new BrushConverter().ConvertFromString(temp.ToString()) as SolidColorBrush;

         SurfaceInkCanvasContainer.DefaultDrawingAttributes.Color = c.Color;

내가 사용한 방법이다. brush를 SolidColorBrush로 BrushConvert의 도움을 받아서 컨버팅한후 Color프로퍼티를 이용하였다.

참고 : http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/fb164db0-c169-4d0e-85dc-c79163ea3aac/

Posted by 동동(이재동)
Surface2012. 4. 25. 11:46

보통 control을 만들때 genneric.xaml에 디자인을 구현하고 x:Name을 이용해서 해당 control의 cs안에서 컨트롤 하고 싶을때

이렇게 하면 된다.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using Microsoft.Surface.Presentation.Controls;

namespace MyControl
{
    [TemplatePart(Name = SurfaceInkCanvasName, Type = typeof(SurfaceInkCanvas))]
    public class DrawPanelControl : Control
    {
        //template
        internal const string SurfaceInkCanvasName = "xSurfaceInkCanvas";
        internal SurfaceInkCanvas SurfaceInkCanvasContainer;

        public DrawPanelControl()
        {
            DefaultStyleKey = typeof(DrawPanelControl);
        }

        public override void OnApplyTemplate()
        {
            SurfaceInkCanvasContainer = this.GetTemplateChild(SurfaceInkCanvasName) as SurfaceInkCanvas;

            SurfaceInkCanvasContainer.DefaultDrawingAttributes.Height = 10;
            SurfaceInkCanvasContainer.DefaultDrawingAttributes.Width = 10;
            SurfaceInkCanvasContainer.DefaultDrawingAttributes.Color = Colors.Red;

            base.OnApplyTemplate();
        }
    }
}

저렇게 TemplatePart를 class밖에서 잡고 OnApplyTemplate에서

SurfaceInkCanvasContainer = this.GetTemplateChild(SurfaceInkCanvasName) as SurfaceInkCanvas;

이렇게 정의 하면 된다.

generic.xaml에는 그냥 일반적으로 x:name을 썻다.

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:controls="clr-namespace:MyControl"
                    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                    xmlns:Custom="http://schemas.microsoft.com/surface/2008"
                    xmlns:sf="clr-namespace:Microsoft.Surface.Presentation.Controls;assembly=Microsoft.Surface.Presentation"
                    mc:Ignorable="d">

    <Style TargetType="{x:Type controls:DrawPanelControl}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type controls:DrawPanelControl}">
                    <Grid>
                        <sf:SurfaceInkCanvas x:Name="xSurfaceInkCanvas" Background="Bisque"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>
Posted by 동동(이재동)
Surface2012. 4. 25. 11:25

어휴 그냥 내가 컨트롤 프로젝트를 만들었을때 그냥 일반 c# 프로젝트를 만들어서 그런거 같다.

 

일단 많은 레퍼런스를 추가해야하고

 

꼭 AssemblyInfo.cs에

 

[assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]

 

이구문이 추가 되어야 한다.

이구문이 추가 되기위해서

사용한 네임스페이스는

using System.Resources;

using System.Windows;

이두개가 using되어야 한다.

이거때문에 완전 삽질함

 

참고 : http://charlass.wordpress.com/2012/02/17/wpf-onapplytemplate-is-not-getting-called/

Posted by 동동(이재동)
Windows Phone 72012. 4. 5. 17:51

계속 SelectIndex가 바꼈는데도 SelectChanged이벤트를 일으키지 않아서

ViewModel에서 이렇게 바로 View로 접근해서 수정하였다.

 

Deployment.Current.Dispatcher.BeginInvoke(delegate
                {
                    ((Application.Current.RootVisual as Microsoft.Phone.Controls.PhoneApplicationFrame).Content as GloryApp.Views.CheckInListView).xTicketList.SelectedIndex = -1;
                    ((Application.Current.RootVisual as Microsoft.Phone.Controls.PhoneApplicationFrame).Content as GloryApp.Views.CheckInListView).xTicketList.SelectedIndex = 0;
                });
Posted by 동동(이재동)
Windows Phone 72012. 3. 22. 16:10

실버라이트 툴킷에는 있는데 윈폰 툴킷에는 업어서

내가 만들려는 찰나 찾았따 ㅋ

 

참고 : http://wp7wonders.wordpress.com/2010/10/15/use-the-rating-control-in-windows-phone-7/

Posted by 동동(이재동)
Windows Phone 72012. 3. 22. 15:15

예전 포스팅에도 썻던건데

 

소수점 표현을 하기 위해서 stringformat을 사용한다.

강제로 2자리까지 소수점을 표현하고 싶다면

<Run Text="{Binding Number, StringFormat=\{0:n2\}, ElementName=userControl}"/>

이런식으로 사용한다.

 

참고 :  http://www.kunal-chowdhury.com/2011/05/formatting-text-in-silverlight-xaml.html

Posted by 동동(이재동)
Windows Phone 72012. 3. 21. 16:59

텍스트블럭에 물흐르듯이 흘러가게 하는효과를 가진 컨트롤

자세한 내용은 샘플 참조




Posted by 동동(이재동)
Windows Phone 72012. 3. 14. 15:32

WMAppManifest.xml

에서

 

<App xmlns="" ProductID="{fdc14f57-6675-4eac-a1ce-fdd2c0133dd5}" Title="MnetWP7" RuntimeType="Silverlight" Version="1.0.0.0" Genre="apps.normal" Author="MnetWP7 author" Description="Sample description" Publisher="MnetWP7" BitsPerPixel="32">

저부분에

BitsPerPixel="32"

이걸 추가하면 된다.

 

끝~

너무 쉽다 ㅋ

Posted by 동동(이재동)
Windows Phone 72012. 3. 13. 20:03

예전에 DataTemplateSelector라는거에 대해서 포스트 했었다.

그건 보여주는것에 대해서 DataTemplate을 유동적으로 바꾸는것이였다.

하지만 이번에 할것은 어떤 특정한 이벤트 예를 들어 ListBox의 Item에 버튼을 클릭하면 해당셀의 TextBlock이 수정할수 있는

TextBox로 변하게 한다등등 셀의 DateTemplate을 마음대로 변경할수 있다.

일단 listbox를 만든다. 하지만 난 여기서 ReorderListbox를 이용했음으로 reorderlistbox로 설명하겠다.

 <ct:ReorderListBox x:Name="listBox" Grid.Row="1" ItemsSource="{Binding Data}" Foreground="{StaticResource PhoneForegroundBrush}" IsReorderEnabled="True" ItemTemplate="{StaticResource MyAlbumDataTemplate}">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="SelectionChanged">
                    <i:Interaction.Behaviors>
                        <ec:ConditionBehavior>
                            <ec:ConditionalExpression>
                                <ec:ComparisonCondition LeftOperand="{Binding SelectedIndex, ElementName=listBox}" Operator="NotEqual" RightOperand="-1"/>
                            </ec:ConditionalExpression>
                        </ec:ConditionBehavior>
                    </i:Interaction.Behaviors>
                    <i:InvokeCommandAction Command="{Binding SelectAlbumCommand}" CommandParameter="{Binding SelectedItem, ElementName=listBox}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </ct:ReorderListBox>

아래 selectChanged 이벤트는 무시해도 된다. 하지만 대부분 behind에서 하는 이벤트 처리를 xaml에서 하게 할수 있다(보너스)

 

그리고 리소스를 등록한다.

 

 <UserControl.Resources>
        <DataTemplate x:Key="TextBoxDataTemplate">
                <Grid d:DesignWidth="385" d:DesignHeight="100" Height="80" Margin="0,0,0,10">
                    <Button Content="R" x:Name="RenameButton" Click="RenameButton_Click" Grid.Column="1" >
                        <tk:ContextMenuService.ContextMenu>
                            <tk:ContextMenu>
                                <tk:MenuItem Header="변경" Click="RenameButton_Click"/>
                            </tk:ContextMenu>
                        </tk:ContextMenuService.ContextMenu>
                    </Button>

머 이렇식으로 시작해서 만들자 각각 다른것을 2개를 만들어야 한다. 한개는 일반꺼 한개는 클릭했을때 나오는 dataTempalate

 

자이제 DateTemplate 안에 클릭했을때 itemTemplate을 변경해보자

private void RenameButton_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            (listBox.ItemContainerGenerator.ContainerFromItem((sender as Button).DataContext as MyAlbum) as ReorderListBoxItem).ContentTemplate = this.Resources["TextBoxDataTemplate"] as DataTemplate;
            //(listBox.ItemContainerGenerator.ContainerFromIndex(0) as ListBoxItem).ContentTemplate = this.Resources["TextBoxDataTemplate"] as DataTemplate;
        }

 

아래는 index로도 바꿀수 있다는 예시를 했다. 이렇게 하면 해당셀의 ContentTemplate을 얻어올수 있고 직접 넣을수 있다.

 

참고 : http://stackoverflow.com/questions/329556/focus-on-a-textbox-in-a-datatemplate

Posted by 동동(이재동)
Windows Phone 72012. 3. 8. 16:27

현재 Mnet을 작업하는데 Mnet에서 PlayList를 순서를 마음대로 바꿀수 있게 바꿔야 했다.

아이폰에서나 가능한 순서 바꾸기… 아무리 찾아봐도 순정 Listbox에는 할수 없다.

아이폰이나 안드로이드는 기본컨트롤에서 바꿀수 있는데 왜 윈폰은 없냐고!!!

하지만 누군가 만들어 놓은게 있어서 고맙게 이용해서 성공했다.

 

 

수정모드를 설정할수 있으며

수정모드에서 삭제버튼등을 추가할려면 아쉽게도 DataTemplate을 바꾼후 다시 리로딩해서 수정모드로 가야 한다.

바꾸는 방법은 포스팅했으니 참고 바란다.

자세한 사항은 소스를 참고하자

내가 참고한곳 : http://blogs.msdn.com/b/jasongin/archive/2011/01/03/wp7-reorderlistbox-improvements-rearrange-animations-and-more.aspx

내가 새로 만든 테스트 소스

Posted by 동동(이재동)
Windows Phone 72012. 3. 6. 16:30

<Application.Resources>

        <ResourceDictionary>

에 들어가면 된다.

 

<Converters:MusicVideoExistVisiblityConverter x:Key="MusicVideoExistVisiblityConverter" />

이런 컨버터를 모든 View에 다 넣을려고 하면 힘드니깐..

 

app.xaml에 보관하면 다음부터 쓸때 그냥 컨버터 이름만 쓰면 된다.

Posted by 동동(이재동)
포트폴리오2012. 2. 23. 15:20

정말 힘들었던 프로젝트중 하나입니다. 일단 개발자는 1명(저!!!) 디자이너 1명(기백)

이렇게 시작했던 프로젝트였고 역시 끝날때도 이렇게 추가 없이 끝났습니다.

일단 짧은 기간, 방대한 양의 업무파악,아이폰과 100% 똑같아야 한다는 부담감, 기획서도 없습니다.

일단 엄청나게 좋지 않은 조건에서 시작하였고

기획서가 없어서 아이폰소스를 보면서 하나하나 참고해야했고(아이폰 앱을 만들어 보지 않았다면 못했을 작업)

어떤 기능이 있는지 몰라서 하나하나 실행하면서 했었습니다. 물론 정말 꼼꼼하게 봤었고 모르는게 있으면 메신저로 코레일 직업원에게 물어봤었는데 웬만하면 아이폰소스랑 제 핸드폰을 이용해서 기능을 배웠습니다.

직통, 환승 에 따라 UI가 다 다르고, 할인은 또 얼마나 종류가 많은지 ㅠㅠ (아니 열차안에서 언제부터 영화를 볼수 있고 좌석을 선택할수 있었던거지??? 영화 예매까지도 구현해야되?)

그리고 알수 없는 수많은 API들... , 윈폰에는 없는 아이폰 전용 컨트롤들...

프로젝트 마지막에 아이폰말고 안드로이드 테스트해서  왜 다르냐고 어이 없는 상황까지...

그리고 아이폰 1년동안 업그레이드 한것들을 그대로 적용해야했기때문에 시간도 모잘랐고

아이폰은 8명인가? 개발하고 개발 시간도 많았던데 난 왜 혼자서 2달만에 개발하라는건지 모르겠네요. 덕분에 맨날 야근

스트레스도 많이 받았지만 무사히 코레일 공식앱을 완성해서 기쁩니다. 

남은게 있다면 코레일 취직해도 될만큼 철도 전문가가 되었네요 하하하 늘어야할 코딩실력은 안늘고...ㅠㅠ


 

 

 

 

 

 

 

 

 

 

 

 

 

 

Posted by 동동(이재동)
Windows Phone 72012. 2. 23. 10:31

ConverterParameter를 사용하면 Converter를 만드는일을 줄일수 있다.

만약 20120223 이라는 Date를

각각 텍스트블럭에 2012년 02월 23일 처럼 넣고 싶은데 한번에 넣을수도 있지만 년월일이 색상이나 크기가 다를때는

택스트 블럭을 각각 만들어 넣어야 한다.

그렇다면 이것을 각각 YearConverter,MonthConverter,DayConverter 이렇게 3개의 컨버터를 만들어서 해야 하는가?

물론 가능하지만 엄청 귀찮은 일이 될것이다.

그럴때 paramter를 쓰면 편하다.

object형이라서 아무거나 넣을수 있지만 string같은경우는 “” 이렇게 따옴표로 묶을수 있는데 따옴표는 쓰면 안된다.

꼭 ‘’ 로 묶자

<TextBlock TextWrapping="Wrap" Text="{Binding h_dpt_dt, Converter={StaticResource YearConverter},ConverterParameter='Year'}" Foreground="Black" HorizontalAlignment="Left" Margin="10,0,0,0" FontWeight="Bold" VerticalAlignment="Bottom"/>

 

이렇게 사용하면 된다.

 

Converter에서는

public class DateCropConverter :IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == null)
                return string.Empty;

            if (parameter.Equals("Year"))
            {
                return (value as string).Substring(0, 4);
            }
            else if (parameter.Equals("Month"))
            {
                return (value as string).Substring(4, 2);
            }
            else
            {
                return (value as string).Substring(6, 2);
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

이렇게 parameter로 넘어오기때문에 컨버터를 굳이 3개 를 만들필요 없이 하나로 해결하였다.

Posted by 동동(이재동)