본문 바로가기

2018/01

015. 두개의 콘텐츠 버튼(Two Contents Button) #1 위와 같이 2개의 Content가 사용되는 버튼 컨트롤은 실제 프로젝트에서 흔히 사용됩니다. 기본으로 제공되는 버튼 컨트롤은 Content 속성이 하나 밖에 제공되지 않지만 Object 타입이기 때문에 아래와 같은 방법으로 흔히 표현할 수 있습니다. 12345678 Colored by Color Scriptercs 123456 Colored by Color Scriptercs 가장 간단한 방법은 위와 같지 않을까 생각됩니다. 하지만 버튼 컨트롤 자체의 Style과 Template에 영향을 받을 수 없는 한계가 있습니다. 물론 TextBlock 자체에 Style를 입힐 수는 있습니다. 123456789101112131415161718192021 Colored by Color Scriptercs 기본으로 제.. 더보기
014. 결합 속성(Attached property) AttachedProperty.cs : 의존 속성 샘플 프로젝트에 AttachedProperty.cs 파일을 추가하고 SetFontPanel 클래스를 작성합니다. 1234567891011121314151617181920212223242526272829#region ChildrenFontSize public static readonly DependencyProperty ChildrenFontSizeProperty = DependencyProperty.RegisterAttached( "ChildrenFontSize", typeof(double), typeof(SetFontPanel), new PropertyMetadata((double)12, OnChildrenFontSizePropertyChanged));.. 더보기
013. 속성 상속(Resolved Dynamically) 큰 프로젝트에서 XAML 코드 작업을 하다보면 점점 늘어나는 코드 양에 스트레스를 받을 때가 간혹 있습니다. Style로 묶어 관리하기도 하고 Resource Dictionary 파일을 여러 개 나누어 관리도 하면서 나름대로의 효율을 찾아서 자신만의 스타일을 갖게 됩니다. 1234567 Colored by Color Scriptercs 이해를 돕기위해 극단적으로 예제를 들고자합니다. 텍스트의 Font와 관련된 속성들을 보면 FontSize, FontFamily, FontWeight, FontStyle, FontStretch, Foreground 등 많은 속성들이 사용됩니다. 앞에서 이야기했 듯 이런 복잡함은 스타일, 리소스딕셔너리 등 다양한 방법들을 이용해 효율적으로 관리될 수 있습니다. 그런데 일반적으.. 더보기
012. 컨버터(Value Converter) StringEmptyToVisibilityConverter.cs : 컨버터 123456789101112public class StringEmptyToVisibilityConverter : IValueConverter{ public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return string.IsNullOrEmpty(value.ToString()) ? Visibility.Visible : Visibility.Collapsed; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo cu.. 더보기
011. 의존 속성(Dependency Property) 간단한 예제를 통해 Dependency property에 대해 알아봅니다. 기본으로 제공되는 UI 컨트롤은 대부분의 속성이 의존 속성으로 되어 있습니다. 기본 TextBox를 이용해 입력을 유도하는 가이드 문구를 추가해 사용하는 예제를 만들어 봅니다. GuideTextBox.cs : 의존 속성 1234567891011121314151617#region GuideText : 가이드 문구 public object GuideText{ get { return (object)GetValue(GuideTextProperty); } set { SetValue(GuideTextProperty, value); }} public static readonly DependencyProperty GuideTextProperty.. 더보기
010. 데이타트리거(DataTrigger) 데이타 트리거에 대해서 다시 한번 살펴봅니다. 1234public class SampleData{ public string Type { get; set; }}Colored by Color Scriptercs 예제를 위해 간단히 SampleData 클래스를 추가합니다. string 타입의 Type .Net property를 정의합니다. 12345678 Colored by Color Scriptercs Style_DataTriggerTextBox 스타일에 데이타 트리거를 추가하고 Type 프로퍼티와 바인딩합니다. Type이 Good이거나 Bad일 때 호출됩니다. 1234Colored by Color Scriptercs 12this.txbGood.DataContext = new SampleData { Type.. 더보기
009. 4가지 트리거(Triggers) Style과 Trigger는 비슷한 점이 많습니다. 다른 점이라면 스타일은 무조건 적용되는 반면 트리거는 조건을 수반한다는 점입니다. 트리거는 4가지 종류가 있습니다. Property : Dependency Property가 변경될 때 호출됩니다.Event : 이벤트가 발생할 때 호출됩니다.Data : Binding 문법으로 연결된 .NET property가 특정 데이타일 때 호출됩니다.Multi(& MultiData) : 조건을 다수 사용해 논리곱(AND) 관계를 정의합니다. 123Colored by Color Scriptercs 2개의 TextBox에 동일한 스타일을 적용했습니다. 2개를 예제로 든 이유는 포커스 상태를 쉽게 잃기 위함일뿐 다른 이유는 없습니다. 1. 프로퍼티 트리거 123456789.. 더보기
008. 스타일 파생(Derive Style) 1234567891011 Colored by Color Scriptercs Style의 BasedOn 속성을 이용해 이전 Style_ControlBase 스타일을 상속 받아 새로운 스타일을 정의합니다. TargetType을 TextBox로 제한하고 Setter 정의시 Class명과 함께 정의한다면 더욱 견고히 스타일을 정의할 수 있습니다. 12345 cs Style_ControlBase 스타일은 Control Class에만 국한되고 Style_ReadOnlyTextBox 스타일은 TextBox Class에만 국한되어 깔끔히 분리되어 재사용될 수 있습니다. 123456 Colored by Color Scriptercs TargetType을 TextBox로 제한한 상태에서는 TextBox Class명을 생략.. 더보기
007. 스타일 정의(Override Style) 1234567 Colored by Color Scriptercs Style의 Setter를 정의할 때 Property 앞에 Class명을 지정할 수 있습니다. 1234Colored by Color Scriptercs TextBox와 Button은 모두 Control에서 파생된 컨트롤이기 때문에 스타일에 영향을 받습니다. 추가로 TargetType을 지정하지 않았기 때문에 가능한 일이기도 합니다. 12345 Colored by Color Scriptercs TargetType을 지정하면 해당 타입에만 영향을 줄 수 있기 때문에 많은 스타일을 다루는 프로젝트에서는 약이 되기도 하고 독이 되기도 합니다. 저는 TargetType을 지정해서 관리하는 것을 선호합니다. 12cs Style을 지정했지만 해당 속성을.. 더보기
006. 클래스와 데이타템플릿(Class & DataTemplate) 123456789101112131415public class Person{ public string RealName { get; set; } public int Age { get; set; }} public class Family : List{ public Family() { Add(new Person() { RealName = "길동", Age = 40 }); Add(new Person() { RealName = "철수", Age = 30 }); Add(new Person() { RealName = "영희", Age = 20 }); }}Colored by Color Scriptercs 목록형의 아이템 구성은 예제처럼 간단하지 않고 더 복잡할 수 있습니다. 하지만 복잡한 구성일지라도 Class를 이용해 .. 더보기