첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ 의존 속성 사용하기

----------------------------------------------------------------------------------------------------

SpaceButton.cs

 

 

using System;

using System.Text;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Input;

using System.Windows.Media;

 

/// <summary>

/// 공백 버튼

/// </summary>

public class SpaceButton : Button

{

    //////////////////////////////////////////////////////////////////////////////////////////////////// Field

    ////////////////////////////////////////////////////////////////////////////////////////// Static

    //////////////////////////////////////////////////////////////////////////////// Public

 

    #region Field

 

    /// <summary>

    /// 공백 속성

    /// </summary>

    public static readonly DependencyProperty SpaceProperty;

 

    #endregion

 

    ////////////////////////////////////////////////////////////////////////////////////////// Instance

    //////////////////////////////////////////////////////////////////////////////// Private

 

    #region Field

 

    /// <summary>

    /// 텍스트

    /// </summary>

    private string text;

 

    #endregion

 

    //////////////////////////////////////////////////////////////////////////////////////////////////// Property

    ////////////////////////////////////////////////////////////////////////////////////////// Public

 

    #region 텍스트 - Text

 

    /// <summary>

    /// 텍스트

    /// </summary>

    public string Text

    {

        set

        {

            this.text = value;

 

            Content = SpaceOutText(this.text);

        }

        get

        {

            return this.text;

        }

    }

 

    #endregion

 

    #region 공백 - Space

 

    /// <summary>

    /// 공백

    /// </summary>

    public int Space

    {

        set

        {

            SetValue(SpaceProperty, value);

        }

        get

        {

            return (int)GetValue(SpaceProperty);

        }

    }

 

    #endregion

 

    //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

    ////////////////////////////////////////////////////////////////////////////////////////// Static

 

    #region 생성자 - SpaceButton()

 

    /// <summary>

    /// 생성자

    /// </summary>

    static SpaceButton()

    {

        FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata();

 

        metadata.DefaultValue   = 1;

        metadata.AffectsMeasure = true;

        metadata.Inherits       = true;

 

        metadata.PropertyChangedCallback += metadata_PropertyChangedCallback;

 

        SpaceProperty = DependencyProperty.Register

        (

            "Space",

            typeof(int),

            typeof(SpaceButton),

            metadata,

            metadata_ValidateValueCallback

        );

    }

 

    #endregion

 

    //////////////////////////////////////////////////////////////////////////////////////////////////// Method

    ////////////////////////////////////////////////////////////////////////////////////////// Static

    //////////////////////////////////////////////////////////////////////////////// Private

    ////////////////////////////////////////////////////////////////////// Event

 

    #region 메타 데이터 속성 변경 콜백 처리하기 - metadata_PropertyChangedCallback(dependencyObject, e)

 

    /// <summary>

    /// 메타 데이터 속성 변경 콜백 처리하기

    /// </summary>

    /// <param name="dependencyObject">이벤트 발생자</param>

    /// <param name="e">이벤트 인자</param>

    private static void metadata_PropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)

    {

        SpaceButton spaceButton = dependencyObject as SpaceButton;

 

        spaceButton.Content = spaceButton.SpaceOutText(spaceButton.Text);

    }

 

    #endregion

 

    #region 메타 데이터 값 무결성 조사 콜백 처리하기 - metadata_ValidateValueCallback(instance)

 

    /// <summary>

    /// 메타 데이터 값 무결성 조사 콜백 처리하기

    /// </summary>

    /// <param name="instance">인스턴스</param>

    /// <returns>메타 데이터 값 무결성 조사 콜백 처리 결과</returns>

    private static bool metadata_ValidateValueCallback(object instance)

    {

        int value = (int)instance;

 

        return value >= 0;

    }

 

    #endregion

 

    ////////////////////////////////////////////////////////////////////////////////////////// Instance

    //////////////////////////////////////////////////////////////////////////////// Private

    ////////////////////////////////////////////////////////////////////// Function

 

    #region 텍스트 공백 출력하기 - SpaceOutText(source)

 

    /// <summary>

    /// 텍스트 공백 출력하기

    /// </summary>

    /// <param name="source">소스 문자열</param>

    /// <returns>처리 결과</returns>

    private string SpaceOutText(string source)

    {

        if(source == null)

        {

            return null;

        }

 

        StringBuilder stringBuilder = new StringBuilder();

 

        foreach(char character in source)

        {

            stringBuilder.Append(character + new string(' ', Space));

        }

 

        return stringBuilder.ToString();

    }

 

    #endregion

}

 

 

SpaceWindow.cs

 

 

using System;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Input;

using System.Windows.Media;

 

/// <summary>

/// 공백 윈도우

/// </summary>

public class SpaceWindow : Window

{

    //////////////////////////////////////////////////////////////////////////////////////////////////// Field

    ////////////////////////////////////////////////////////////////////////////////////////// Static

    //////////////////////////////////////////////////////////////////////////////// Public

 

    #region Field

 

    /// <summary>

    /// 공백 속성

    /// </summary>

    public static readonly DependencyProperty SpaceProperty;

 

    #endregion

 

    //////////////////////////////////////////////////////////////////////////////////////////////////// Property

    ////////////////////////////////////////////////////////////////////////////////////////// Public

 

    #region 공백 - Space

 

    /// <summary>

    /// 공백

    /// </summary>

    public int Space

    {

        set

        {

            SetValue(SpaceProperty, value);

        }

        get

        {

            return (int)GetValue(SpaceProperty);

        }

    }

 

    #endregion

 

    //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

    ////////////////////////////////////////////////////////////////////////////////////////// Static

 

    #region 생성자 - SpaceWindow()

 

    /// <summary>

    /// 생성자

    /// </summary>

    static SpaceWindow()

    {

        FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata();

 

        metadata.Inherits = true;

 

        SpaceProperty = SpaceButton.SpaceProperty.AddOwner(typeof(SpaceWindow));

 

        SpaceProperty.OverrideMetadata(typeof(SpaceWindow), metadata);

    }

 

    #endregion

}

 

----------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요