이번 글은 C# WPF 프로그래밍 basic property가 아닌 Dependency Property 다루기입니다.
데이터 바인딩을 하려면 basic property에서는 문제가 생기지만 Dependency Property에서는 오류가 안납니다.
1. xaml 소스 코드
<Window x:Class="MyDependencyProperty2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MyDependencyProperty2"
xmlns:asdf="clr-namespace:MyDependencyProperty2.asdf"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<asdf:MyStackPanel x:Name="myStack"
IsBrownBackground="{Binding ElementName=myCheckBox, Path=IsChecked}">
<CheckBox x:Name="myCheckBox"
Content="Brown Background"
IsChecked="True"
Click="MyCheckBox_Click"/>
</asdf:MyStackPanel>
</Grid>
</Window>
2. 클래스 파일 소스 코드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
namespace MyDependencyProperty2.asdf
{
class MyStackPanel : StackPanel
{
//dependency property
//DependencyProperty 타입의 IsbrownBackgroundProperty를 만든다.
//같은 이름 뒤에 Property를 붙여준다
public static DependencyProperty IsBrownBackgroundProperty
//IsBrownBackground를 String으로 넣어줌
= DependencyProperty.Register("IsBrownBackground",
//두번째 인자는 IsBrownBackground의 타입
typeof(bool),
//세번째 인자는 MyStackPanel에 속해 있는 것
typeof(MyStackPanel),
new PropertyMetadata(false, OnIsBrownBackgroundChanged));
//OnIsBrownBackgroundChange는 Call Back 함수
//사용자는 이 property를 사용해서 변경
public bool IsBrownBackground
{
get
{
//boolean형으로 바꿔 return
return (bool)GetValue(IsBrownBackgroundProperty);
}
set
{
SetValue(IsBrownBackgroundProperty, value);
}
}
private static void OnIsBrownBackgroundChanged(
DependencyObject source,
DependencyPropertyChangedEventArgs e)
{
MyStackPanel mysp = (MyStackPanel)source;
//MystackPanel mysp = source as MyStackPanel;
if(mysp.IsBrownBackground==true)
{
mysp.Background = System.Windows.Media.Brushes.BurlyWood;
}
else
{
mysp.Background = System.Windows.Media.Brushes.Gray;
}
}
}
}
3. 결과
'Language > C# WPF Programming' 카테고리의 다른 글
C# WPF 프로그래밍 데이터 바인딩 예제 (0) | 2019.05.27 |
---|---|
C# WPF 프로그래밍 데이터 바인딩(Data Binding) 구현하기 (0) | 2019.05.26 |
C# WPF 프로그래밍 데이터베이스(DB) 생성 및 연동하기 (0) | 2019.05.25 |
C# WPF 프로그래밍 계산기(Calculator) 프로그램 만들기 - 연산자 다중 계산 (2) | 2019.05.20 |
C# WPF 프로그래밍 Basic Property 다루기 (0) | 2019.05.14 |
C# WPF 프로그래밍 속성(Property) 다루기 (0) | 2019.05.13 |
C# WPF 프로그래밍 계산기(Calculator) 프로그램 만들기 - layout 추가(계산 과정, 히스토리 기능 추가) (1) | 2019.05.08 |
C# WPF 프로그래밍 계산기(Calculator) 프로그램 만들기 - 기능 추가(X^2, 1/X, Delete, Sqrt 버튼 추가) (0) | 2019.05.06 |
최근댓글