SlideShare a Scribd company logo
1 of 11
의존속성, 의존프로퍼티
(DEPENDENCY PROPERTY)
www.topcredu.co.kr 이종철
•
•
•
•
<Window x:Class="DependencyPropertyTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="295" Width="300">
<Window.ContextMenu>
<ContextMenu MenuItem.Click="ContextMenu_Click">
<MenuItem Header="Red"/>
<MenuItem Header="Green"/>
<MenuItem Header="Blue"/>
<MenuItem Header="Orange"/>
</ContextMenu>
</Window.ContextMenu>
<TextBox x:Name="textBox1" Height="23" TextWrapping="Wrap"
Text="TextBox" Width="120"/> </Window>
MainWindow.xaml
MainWindow.xaml.cs
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace DependencyPropertyTest {
public partial class MainWindow : Window
{
public MainWindow() {
InitializeComponent();
}
public String MyText {
get { return
(String)GetValue(MyProperty); }
set { SetValue(MyProperty, value); }
}
public static readonly
DependencyProperty MyProperty
= DependencyProperty.Register(
" MyText",
typeof(String),
typeof(MainWindow),
new
FrameworkPropertyMetadata(new
PropertyChangedCallback(OnMyPr
opertyChanged)));
MainWindow.xaml.cs
private static void
OnMyPropertyChanged(DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
MainWindow win = d as MainWindow;
SolidColorBrush brush =
(SolidColorBrush)new
BrushConverter().ConvertFromString(e.NewValue.T
oString());
win.Background = brush;
win.Title = (e.OldValue == null) ?
"제목없음" : e.OldValue.ToString();
win.textBox1.Text = e.NewValue.ToString();
}
private void
ContextMenu_Click(object sender,
RoutedEventArgs e)
{
string str = (e.Source as
MenuItem).Header as string;
MyText = str;
}
}
}
실행화면
 의존 속성은 의존속성을 선언, 등록, 프로퍼티 생성 세단계로 작성된다.
 의존 속성 선언 및 등록
//의존 속성 선언 및 등록
public static readonly DependencyProperty MyProperty =
DependencyProperty.Register(
" MyText", //등록할 의존 속성 이름
typeof(String),
typeof(MainWindow),
new FrameworkPropertyMetadata(new
PropertyChangedCallback(OnMyPropertyChanged))); //속성변경시 호출될 메
소드
 의 존 속 성 은 읽 기 전 용 (readonly) 필 드 로 선 언 되 는 데 이 것 은 오 직
FrameworkElement 클래스의 static 생성자에서만 설정될 수 있다는 것을 의미
한다.
 DependencyProperty 클래스에는 public 생성자가 없기 때문에 static 메소드인
DencyProperty.Register()를 사용해서 등록한다.
 Register 메서드의 입력 파라미터의 첫 번째 파라미터는 프로퍼티 이름이다. 여
기서는 “MyText”, 두 번째 인자는 프로퍼티(MyText)가 사용할 데이터 타입으로
여기에서는 String 이다. 세 번째 인자는 프로퍼티를 소유하게 될 타입, 이 예제
에서는 MainWindow 클래스가 된다. 네 번째 인자는 실제로 어떻게 동작할 것
인지에 대한 옵션을 설정을 할당해 준다. FrameworkPropertyMetadata 객체를
통하여 만약 값이 수정되었을 때의 알림을 어떻 받을 것인가를 정의했으며 본
예제에서는 OnMyPropertyChanged 메소드가 알림을 받을 콜백 함수로 정의되
었다. 선택적으로 new ValidataValueCallback을 사용하여 값의 유효성 검사를 어
떻게 할 것인지 등을 설정하면 된다. 네 번째, 다섯 번째 파라미터는 옵션 파라미
터이다.
 DependencyProperty(MyProperty)를 위한 래퍼 프로퍼티 MyText 선언
public String MyText
{
get { return (String)GetValue(MyProperty); }
set { SetValue(MyProperty, value); }
}
이 래퍼 프로퍼티에서는 System.Windows.DependencyObject 클래스의
GetValue()와 SetValue() 메서드를 이용해서 get, set을 정의해야 한다.
 Context Menu Click 이벤트에서는 MyText 프로퍼티에 값을 설정하면 자동으로
위에서 선언한 콜백 함수(OnMyPropertyChanged)가 호출된다.
private void ContextMenu_Click(object sender, RoutedEventArgs e)
{
string str = (e.Source as MenuItem).Header as string;
MyText = str;
}
 우리가 흔히 알고 있는 Height와 Width와 같은 멤버들은 FrameworkElement를
상속받았고 Content 속성은 ControlContent로부터 상속받은 속성으로 모두 의존
속성이다.

More Related Content

What's hot

What's hot (20)

jQuery
jQueryjQuery
jQuery
 
jQuery Fundamentals
jQuery FundamentalsjQuery Fundamentals
jQuery Fundamentals
 
jQuery
jQueryjQuery
jQuery
 
JavaScript Promises
JavaScript PromisesJavaScript Promises
JavaScript Promises
 
Constitución del proyecto
Constitución del proyectoConstitución del proyecto
Constitución del proyecto
 
Manage block editor state and data
Manage block editor state and dataManage block editor state and data
Manage block editor state and data
 
Asp.net state management
Asp.net state managementAsp.net state management
Asp.net state management
 
Node.js Express Tutorial | Node.js Tutorial For Beginners | Node.js + Expres...
Node.js Express Tutorial | Node.js Tutorial For Beginners | Node.js +  Expres...Node.js Express Tutorial | Node.js Tutorial For Beginners | Node.js +  Expres...
Node.js Express Tutorial | Node.js Tutorial For Beginners | Node.js + Expres...
 
Lets make a better react form
Lets make a better react formLets make a better react form
Lets make a better react form
 
Herramientas de flash cs3
Herramientas de flash cs3Herramientas de flash cs3
Herramientas de flash cs3
 
jQuery Essentials
jQuery EssentialsjQuery Essentials
jQuery Essentials
 
Inheritance in c++
Inheritance in c++ Inheritance in c++
Inheritance in c++
 
C# Delegates and Event Handling
C# Delegates and Event HandlingC# Delegates and Event Handling
C# Delegates and Event Handling
 
Ngrx slides
Ngrx slidesNgrx slides
Ngrx slides
 
Html5 structure & semantic
Html5 structure & semanticHtml5 structure & semantic
Html5 structure & semantic
 
Dom(document object model)
Dom(document object model)Dom(document object model)
Dom(document object model)
 
Javascript
JavascriptJavascript
Javascript
 
An Introduction to the DOM
An Introduction to the DOMAn Introduction to the DOM
An Introduction to the DOM
 
Listeners and filters in servlet
Listeners and filters in servletListeners and filters in servlet
Listeners and filters in servlet
 
Javascript Design Patterns
Javascript Design PatternsJavascript Design Patterns
Javascript Design Patterns
 

Similar to (WPF학원/WPF교육)C#, WPF, XAML의 의존속성, 의존프로퍼티에 대해 알아봅니다.

자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기Jeado Ko
 
Introduction To Xaml
Introduction To XamlIntroduction To Xaml
Introduction To Xamlphoooo
 
[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발NAVER D2
 

Similar to (WPF학원/WPF교육)C#, WPF, XAML의 의존속성, 의존프로퍼티에 대해 알아봅니다. (6)

Performance test
Performance testPerformance test
Performance test
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기
 
Hacosa j query 11th
Hacosa j query 11thHacosa j query 11th
Hacosa j query 11th
 
Swt J Face 2/3
Swt J Face 2/3Swt J Face 2/3
Swt J Face 2/3
 
Introduction To Xaml
Introduction To XamlIntroduction To Xaml
Introduction To Xaml
 
[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발
 

More from 탑크리에듀(구로디지털단지역3번출구 2분거리)

[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]탑크리에듀(구로디지털단지역3번출구 2분거리)
 

More from 탑크리에듀(구로디지털단지역3번출구 2분거리) (20)

자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
 
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
 
[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육
 
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
 
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
 
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
 
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
 
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
 
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
 
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
 
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
 
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
 
2. xamarin.android 2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...
2. xamarin.android  2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...2. xamarin.android  2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...
2. xamarin.android 2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...
 

(WPF학원/WPF교육)C#, WPF, XAML의 의존속성, 의존프로퍼티에 대해 알아봅니다.

  • 4. <Window x:Class="DependencyPropertyTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="295" Width="300"> <Window.ContextMenu> <ContextMenu MenuItem.Click="ContextMenu_Click"> <MenuItem Header="Red"/> <MenuItem Header="Green"/> <MenuItem Header="Blue"/> <MenuItem Header="Orange"/> </ContextMenu> </Window.ContextMenu> <TextBox x:Name="textBox1" Height="23" TextWrapping="Wrap" Text="TextBox" Width="120"/> </Window> MainWindow.xaml
  • 5. MainWindow.xaml.cs using System; using System.Windows; using System.Windows.Controls; using System.Windows.Media; namespace DependencyPropertyTest { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } public String MyText { get { return (String)GetValue(MyProperty); } set { SetValue(MyProperty, value); } } public static readonly DependencyProperty MyProperty = DependencyProperty.Register( " MyText", typeof(String), typeof(MainWindow), new FrameworkPropertyMetadata(new PropertyChangedCallback(OnMyPr opertyChanged)));
  • 6. MainWindow.xaml.cs private static void OnMyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { MainWindow win = d as MainWindow; SolidColorBrush brush = (SolidColorBrush)new BrushConverter().ConvertFromString(e.NewValue.T oString()); win.Background = brush; win.Title = (e.OldValue == null) ? "제목없음" : e.OldValue.ToString(); win.textBox1.Text = e.NewValue.ToString(); } private void ContextMenu_Click(object sender, RoutedEventArgs e) { string str = (e.Source as MenuItem).Header as string; MyText = str; } } }
  • 8.  의존 속성은 의존속성을 선언, 등록, 프로퍼티 생성 세단계로 작성된다.  의존 속성 선언 및 등록 //의존 속성 선언 및 등록 public static readonly DependencyProperty MyProperty = DependencyProperty.Register( " MyText", //등록할 의존 속성 이름 typeof(String), typeof(MainWindow), new FrameworkPropertyMetadata(new PropertyChangedCallback(OnMyPropertyChanged))); //속성변경시 호출될 메 소드
  • 9.  의 존 속 성 은 읽 기 전 용 (readonly) 필 드 로 선 언 되 는 데 이 것 은 오 직 FrameworkElement 클래스의 static 생성자에서만 설정될 수 있다는 것을 의미 한다.  DependencyProperty 클래스에는 public 생성자가 없기 때문에 static 메소드인 DencyProperty.Register()를 사용해서 등록한다.  Register 메서드의 입력 파라미터의 첫 번째 파라미터는 프로퍼티 이름이다. 여 기서는 “MyText”, 두 번째 인자는 프로퍼티(MyText)가 사용할 데이터 타입으로 여기에서는 String 이다. 세 번째 인자는 프로퍼티를 소유하게 될 타입, 이 예제 에서는 MainWindow 클래스가 된다. 네 번째 인자는 실제로 어떻게 동작할 것 인지에 대한 옵션을 설정을 할당해 준다. FrameworkPropertyMetadata 객체를 통하여 만약 값이 수정되었을 때의 알림을 어떻 받을 것인가를 정의했으며 본 예제에서는 OnMyPropertyChanged 메소드가 알림을 받을 콜백 함수로 정의되 었다. 선택적으로 new ValidataValueCallback을 사용하여 값의 유효성 검사를 어 떻게 할 것인지 등을 설정하면 된다. 네 번째, 다섯 번째 파라미터는 옵션 파라미 터이다.
  • 10.  DependencyProperty(MyProperty)를 위한 래퍼 프로퍼티 MyText 선언 public String MyText { get { return (String)GetValue(MyProperty); } set { SetValue(MyProperty, value); } } 이 래퍼 프로퍼티에서는 System.Windows.DependencyObject 클래스의 GetValue()와 SetValue() 메서드를 이용해서 get, set을 정의해야 한다.
  • 11.  Context Menu Click 이벤트에서는 MyText 프로퍼티에 값을 설정하면 자동으로 위에서 선언한 콜백 함수(OnMyPropertyChanged)가 호출된다. private void ContextMenu_Click(object sender, RoutedEventArgs e) { string str = (e.Source as MenuItem).Header as string; MyText = str; }  우리가 흔히 알고 있는 Height와 Width와 같은 멤버들은 FrameworkElement를 상속받았고 Content 속성은 ControlContent로부터 상속받은 속성으로 모두 의존 속성이다.