배포 완료되었습니다..
다음 기회에 뵙도록 하겠습니다(_ _)
'동구의 주저리' 카테고리의 다른 글
군악대 테이, 민경훈의 공연 (0) | 2013.07.28 |
---|---|
PC 구매~~ (0) | 2013.06.28 |
OK캐쉬백 마이프리미엄카드 설악워터피아 이용기 (2) | 2013.02.06 |
티스토리 초대장 무료 배포[완료] (22) | 2013.01.29 |
옵티머스G 이어폰이 드디어 배송되었다~ (0) | 2012.11.01 |
배포 완료되었습니다..
다음 기회에 뵙도록 하겠습니다(_ _)
군악대 테이, 민경훈의 공연 (0) | 2013.07.28 |
---|---|
PC 구매~~ (0) | 2013.06.28 |
OK캐쉬백 마이프리미엄카드 설악워터피아 이용기 (2) | 2013.02.06 |
티스토리 초대장 무료 배포[완료] (22) | 2013.01.29 |
옵티머스G 이어폰이 드디어 배송되었다~ (0) | 2012.11.01 |
외부적으로는 같은 기능을 수행하되 내부적으로는 약간 다른 로직을 가진 2개 이상의 Class들을 설계 하기 위해 Abstract Class를 이용하였다.
CommonGallery라는 공통의 Abstract Class를 만들었다. CommonGallery는 UserControl과 IContent를 상속 받았다.
public interface IContent { event Action ContentTouchDownEvent; void NotifyActivate(bool state); void SetWorkDirectory(string workPath);
}
|
IContent.cs
SetWorkDirectory 메서드는 동일한 동작을 하고 NotifyActivate메서드는 각 Gallery마다 초기화 및 종료가 다르므로 abstract 메서드로 설정하였다.
public abstract class CommonGallery : UserControl, IContent { /// <summary> /// Touch가 발생하면 호출됩니다. /// </summary> public event Action ContentTouchDownEvent;
#region Ctor public CommonGallery() { this.PreviewTouchDown += delegate(object sender, System.Windows.Input.TouchEventArgs e) { if (this.ContentTouchDownEvent != null) this.ContentTouchDownEvent(); }; this.PreviewMouseLeftButtonDown += delegate(object sender, System.Windows.Input.MouseButtonEventArgs e) { if (this.ContentTouchDownEvent != null) this.ContentTouchDownEvent(); }; } #endregion
/// <summary> /// 갤러리에 상황을 알려줍니다. /// </summary> /// <param name="state"></param> public abstract void NotifyActivate(bool state); /// <summary> /// 작업 경로를 설정합니다. /// </summary> /// <param name="workPath"></param> public void SetWorkDirectory(string workPath) { GalleryManager.Instance.ImageFolderPath = workPath; } } |
CommonGallery.cs
문자열을 이용한 포토갤러리인 StringPhotoGallery Class에 CommonGallery 상속받은 후 Xaml을 확인할 결과 아래의 메세지가...두둥!
"CommonGallery"의 인스턴스를 만들 수 없습니다.
지져분하지만.......CommonGallery Class를 아래와 같이 수정 후 정상적으로 작동하게 되었다.
해결방법 1. DEBUG 모드일때에는 abstract 클래스를 class로 임시 변경
#if DEBUG public class CommonGallery : UserControl, IContent #else public abstract class CommonGallery : UserControl, IContent #endif
{ /// <summary> /// Touch가 발생하면 호출됩니다. /// </summary> public event Action ContentTouchDownEvent;
#region Ctor #endregion
#if DEBUG /// <summary> /// 갤러리에 상황을 알려줍니다. /// </summary> /// <param name="state"></param> public virtual void NotifyActivate(bool state) { } #else /// <summary> /// 갤러리에 상황을 알려줍니다. /// </summary> /// <param name="state"></param> public abstract void NotifyActivate(bool state); #endif /// <summary> /// 작업 경로를 설정합니다. /// </summary> /// <param name="workPath"></param> public void SetWorkDirectory(string workPath) { GalleryManager.Instance.ImageFolderPath = workPath; } } |
수정한 CommonGallery.cs
abstract Class의 인스턴스를 만들 수 없다면 Debug 모드일때에는 디자인을 확인해야하므로 일반 class와 virtual 메서드를 이용하고, Release 모드일때에는 abstract class로 사용하였다.
정말 지저분하다......ㅠㅠ
해결방법 2. TypeDescriptionProvider 사용
[키즈님 블로그 출처] http://blog.naver.com/kizrael/220475105952
테스트 해보니 잘 동작하네요.
단지 abstract class를 상속받는 클래스에 컨트롤을 추가하고 컴파일해도
디자이너에 반영이 안되어서 visual studio를 재시작하면 되네요.
되는것 처럼 보이다가......다시 컴파일하면 디자이너 에러 생김...T_T
[TypeDescriptionProvider(typeof(AbstractControlDescriptionProvider<AbstractControl, UserControl>))] public abstract class AbstractControl : UserControl {
} public class AbstractControlDescriptionProvider<TAbstract, TBase> : TypeDescriptionProvider { public AbstractControlDescriptionProvider() : base(TypeDescriptor.GetProvider(typeof(TAbstract))) { }
public override Type GetReflectionType(Type objectType, object instance) { if (objectType == typeof(TAbstract)) return typeof(TBase);
return base.GetReflectionType(objectType, instance); }
public override object CreateInstance(IServiceProvider provider, Type objectType, Type[] argTypes, object[] args) { if (objectType == typeof(TAbstract)) objectType = typeof(TBase);
return base.CreateInstance(provider, objectType, argTypes, args); } } |
[MVVM Galasoft.MvvmLight.WPF4] EventToCommand, 이벤트 정보를 넘기자! (0) | 2013.07.05 |
---|---|
RenderTransform, LayoutTransform (0) | 2013.07.04 |
WebBrowser Script 에러 메세지 띄우지 않기 (0) | 2013.06.14 |
[Surface sdk 2.0] SurfaceListBoxItem 배경 투명하게 만들기 (0) | 2013.06.04 |
디자인 모드 체크 (0) | 2013.06.04 |
/// <summary> /// WebBrowser 컨트롤의 Script Error 메세지박스를 띄우지 않습니다. /// </summary> private void InjectDisableScript() { //HTMLDocumentClass doc = this.webBrowser.Document as HTMLDocumentClass; HTMLDocument doc = this.webBrowser.Document as HTMLDocument;
//Questo crea lo script per la soprressione degli errori IHTMLScriptElement scriptErrorSuppressed = (IHTMLScriptElement)doc.createElement("SCRIPT"); scriptErrorSuppressed.type = "text/javascript"; scriptErrorSuppressed.text = @"function noError() { return true; } window.onerror = noError;";
IHTMLElementCollection nodes = doc.getElementsByTagName("head"); foreach (IHTMLElement elem in nodes) { //Appendo lo script all'head cosi è attivo IHTMLDOMNode head = (IHTMLDOMNode)elem; head.appendChild((IHTMLDOMNode)scriptErrorSuppressed);
}
}
|
RenderTransform, LayoutTransform (0) | 2013.07.04 |
---|---|
WPF abstract class 상속시 "인스턴스를 만들 수 없습니다." 에러 해결 (0) | 2013.06.17 |
[Surface sdk 2.0] SurfaceListBoxItem 배경 투명하게 만들기 (0) | 2013.06.04 |
디자인 모드 체크 (0) | 2013.06.04 |
WPF ScrollViewer Thumbnail (0) | 2013.05.28 |
Surface sdk 2.0 에 있는 SurfaceListBox를 사용하는데
SurfaceListBoxItem의 배경색상이 불투명한 하얀색으로 나와서 구글링 결과 아래의 코드를 찾았다.
<Style x:Key="BgTransparentStyle" TargetType="{x:Type my:SurfaceListBoxItem}" > <Style.Triggers> <Trigger Property="IsSelected" Value="true"> <Setter Property="Foreground" Value="Transparent" /> <Setter Property="Background" Value="Transparent" /> </Trigger> <Trigger Property="IsFocused" Value="true"> <Setter Property="Foreground" Value="Transparent" /> <Setter Property="Background" Value="Transparent" /> </Trigger> <Trigger Property="IsEnabled" Value="true"> <Setter Property="Foreground" Value="Transparent" /> <Setter Property="Background" Value="Transparent" /> </Trigger> <Trigger Property="IsMouseOver" Value="true"> <Setter Property="Foreground" Value="Transparent" /> <Setter Property="Background" Value="Transparent" /> </Trigger> </Style.Triggers> </Style>
..................
<my:SurfaceListBox Width="1080" Height="1480" ItemContainerStyle="{StaticResource BgTransparentStyle}"/> |
[이미지1] 스타일 적용 전
[이미지2] 스타일 적용 후
WPF abstract class 상속시 "인스턴스를 만들 수 없습니다." 에러 해결 (0) | 2013.06.17 |
---|---|
WebBrowser Script 에러 메세지 띄우지 않기 (0) | 2013.06.14 |
디자인 모드 체크 (0) | 2013.06.04 |
WPF ScrollViewer Thumbnail (0) | 2013.05.28 |
Winform에서 ElementHost 개체를 이용해 WPF 사용할 때 리소스 없는 문제 해결 (0) | 2013.05.22 |
if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)) { return; } |
WebBrowser Script 에러 메세지 띄우지 않기 (0) | 2013.06.14 |
---|---|
[Surface sdk 2.0] SurfaceListBoxItem 배경 투명하게 만들기 (0) | 2013.06.04 |
WPF ScrollViewer Thumbnail (0) | 2013.05.28 |
Winform에서 ElementHost 개체를 이용해 WPF 사용할 때 리소스 없는 문제 해결 (0) | 2013.05.22 |
[MVVMLight] Window 창 띄우기 및 MSG 전송 (0) | 2013.03.20 |
ScrollViewer에서 현재 보여지고 있는 부분을 표시하기 위한 내용입니다.
참조: http://www.thejoyofcode.com/WPF_ScrollViewer_Thumbnail.aspx
[이미지 1 결과 화면]
소스 코드입니다.
<Window x:Class="HowToLayoutPreview.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <ScrollViewer x:Name="myScrollViewer" Height="246" HorizontalAlignment="Left" Margin="7,37,0,0" VerticalAlignment="Top" Width="255" HorizontalScrollBarVisibility="Visible"> <Grid> <Image Source="/HowToLayoutPreview;component/Images/Chrysanthemum.jpg" Height="338" Width="357"></Image> <Button Margin="137,139,174,164">아하</Button> </Grid> </ScrollViewer> <Viewbox DataContext="{Binding ElementName=myScrollViewer}" Margin="294,0,0,0"> <Grid> <Rectangle Width="{Binding Content.ActualWidth}" Height="{Binding Content.ActualHeight}"> <Rectangle.Fill> <VisualBrush Visual="{Binding Content}" /> </Rectangle.Fill> </Rectangle> <Border BorderThickness="1" BorderBrush="Black" Background="#88FFFF00" Width="{Binding ViewportWidth}" Height="{Binding ViewportHeight}" HorizontalAlignment="Left" VerticalAlignment="Top"> <Border.RenderTransform> <TranslateTransform X="{Binding HorizontalOffset}" Y="{Binding VerticalOffset}" /> </Border.RenderTransform> </Border> </Grid> </Viewbox> </Grid> </Window> |
프로젝트 파일입니다.
[Surface sdk 2.0] SurfaceListBoxItem 배경 투명하게 만들기 (0) | 2013.06.04 |
---|---|
디자인 모드 체크 (0) | 2013.06.04 |
Winform에서 ElementHost 개체를 이용해 WPF 사용할 때 리소스 없는 문제 해결 (0) | 2013.05.22 |
[MVVMLight] Window 창 띄우기 및 MSG 전송 (0) | 2013.03.20 |
컬렉션 뷰 작업 (ICollectionView 선택 개체 변경) (0) | 2013.03.18 |
WPF 응용 프로그램에서 테스트 했을 때에는
아무 문제 없이 잘돌아가던 프로그램이..
UserControl로 변경하여 Winform에서 호스팅하면...
리소스가 없는 문제가 발생한다.
Application.Current 개체가 null..........ㅠㅠ
구글링 결과 간단하였다.
Application 개체 한번 생성해주고 리소스 불러오면 된다.
/// <summary> /// Winform에서 호스팅시 Resource Load한다. /// </summary> private void EnsureApplicationResources() { if (Application.Current == null) { new Application(); ResourceDictionary skinDict = Application.LoadComponent(new Uri(@"/DVCONSOLE;component/Resources\Skins\xxxx.xaml", UriKind.Relative)) as ResourceDictionary; Application.Current.Resources = skinDict; } }
|
디자인 모드 체크 (0) | 2013.06.04 |
---|---|
WPF ScrollViewer Thumbnail (0) | 2013.05.28 |
[MVVMLight] Window 창 띄우기 및 MSG 전송 (0) | 2013.03.20 |
컬렉션 뷰 작업 (ICollectionView 선택 개체 변경) (0) | 2013.03.18 |
DataGrid RowHeader값 Number 설정하기 (0) | 2013.03.07 |
짬뽕 국물에 소주한잔 생각에
퇴근 후 남자친구와 가산디지털단지역에서 가까운 대륭을 찾았습니다.
대륭 지하에 위치한 깐지로 들어가
주문하기 시작~
깐지의 메뉴판입니다.
3가지 메뉴에 28800(?) 하는 세트 메뉴도 있지만
우리는 삼선짬뽕 1, 실속메뉴의 깐지 탕수육 1를 주문했습니다.
우리가 찾아간 시간이 평일 퇴근 시간이라 그런지
야근하려고 식사를 하러 온 직장인들이 많이 있었습니다.
깐지의 밑반찬은~~
단무지, 짜사이
주문한 짬뽕과 탕수육이 나왔네요~
탕수육은 10000인데 양이 정말 많았습니다.
짬뽕은 삼선 짬뽕이라서 해산물이 가득가득~~~
맛을 본 소감은..
탕수육은 튀김이 안익은 부분도 있고... 껍데기가 너무 두꺼운 느낌이였고..
짬뽕은 면에 짬뽕 맛이 베어있지 않아..그리 맛이 없었네요....
배불리 먹었지만..
깐지의 총평은.. 다시 가지는 않을 것 같은 음식점이라는 거 밖에는...
하하.... 즐거운 주말 되세요.
[영등포역] 계림원 - ★★★★★ (0) | 2013.07.07 |
---|---|
[영등포역] 다락방 화로구이 - ★★☆☆☆ (0) | 2013.07.07 |
[영등포] 포천이동갈비 (0) | 2013.04.14 |
[영등포역] 짚동가리쌩주 (0) | 2013.03.27 |
[금정역] 마스홍 닭발 (0) | 2013.03.27 |
몇일 동안 음식 여행기를 쓰질 못했네요...ㅜㅜ
이번에 포스팅할 음식점은 영등포에 위치한 포천 이동 갈비입니다~~~
우리가 사귄 3년 동안 처음으로 갈비를 먹으로 간 포천이동갈비ㅋㅋ
오늘도 깜빡하고 메뉴판을 못 찍었네요...ㅜㅜ
가겨근 1인분에 11000원 입니다.
돼지갈비 2인분을 주문~!!
그리고 셋팅되는 밑 반찬~
탕평채 빼고는 밑반찬의 맛이 괜찮은 편이였다.
게장을 좋아하는 우리는 리필을 2번이나 했는데
아주머니께서 친절하게 계속 주셨다.ㅋㅋ
덕분에 갈비 보다 게장을 더 먹은듯..
드디어 갈비 굽기 시작!
고기는 맛있었다.
하지만 갈비 보다는 목살을 많이 사용하는 것 같았다.
냉면과 고기의 쌈 맛을 보려고
냉면을 주문!!
냉면에 식초와 겨자를 넣고
한 입 먹은 순간... 후회를 했다...
무슨 맛인지 도통.... 남자친구는 심지어 파스맛이 난다고 한다...
냉면은 거의 손도 대지 않고 남은 고기만 먹고 일어났다...
포천 이동갈비의 총평은 고기와 밑반찬은 맛있으나...
냉면과 함께 먹고 싶을 땐 가면 안되는 곳이다.
[영등포역] 다락방 화로구이 - ★★☆☆☆ (0) | 2013.07.07 |
---|---|
[가산] 깐지 (0) | 2013.04.14 |
[영등포역] 짚동가리쌩주 (0) | 2013.03.27 |
[금정역] 마스홍 닭발 (0) | 2013.03.27 |
[영등포] 이고집 쭈꾸미 (0) | 2013.03.17 |