반응형

안녕하세요, 츄르 사려고 코딩하는 집사! 코집사입니다.

이번 글은 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. 결과

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기