Custom FrameworkElement 정의하고 사용하는 방법입니다.
NumberProperty(숫자)를 의존속성으로가지며 이를 화면에 보여주는 FrameworkElement 를 정의합니다.
CustomElement.cs
using System.Globalization; using System.Windows; using System.Windows.Media;
namespace WpfApp { class CustomElement : FrameworkElement { /// <summary> /// 화면에 표시될 숫자에 대한 의존 속성입니다. /// </summary> public static DependencyProperty NumberProperty;
/// <summary> /// 화면에 표시될 숫자 값입니다. /// </summary> public double Number { set { SetValue(NumberProperty, value); } get { return (double)GetValue(NumberProperty); } }
/// <summary> /// 생성자입니다. /// </summary> static CustomElement() { // DependencyProperty 를 생성합니다. NumberProperty = DependencyProperty.Register ( "Number", typeof(double), typeof(CustomElement), new FrameworkPropertyMetadata ( 0.0, FrameworkPropertyMetadataOptions.AffectsRender ) ); }
/// <summary> /// FrameworkElement 의 크기를 정의합니다. /// </summary> /// <param name="sizeAvailable">자식 요소에 제공할 수 있는 사용 가능한 크기입니다.</param> /// <returns></returns> protected override Size MeasureOverride(Size sizeAvailable) { return new Size(200, 50); }
/// <summary> /// 레이아웃시스템에서 감독하는 렌더링 작업에 참여합니다. /// Number 를 화면에 표시합니다. /// </summary> /// <param name="dc">특정 요소에 대 한 그리기 지침입니다</param> protected override void OnRender(DrawingContext dc) { SolidColorBrush mySolidColorBrush = new SolidColorBrush() { Color = Colors.LimeGreen }; Pen myPen = new Pen(Brushes.LimeGreen, 1); Rect myRect = new Rect(0, 0, 200, 50);
dc.DrawRectangle(mySolidColorBrush, myPen, myRect);
dc.DrawText ( new FormattedText ( Number.ToString(), CultureInfo.CurrentCulture, FlowDirection.LeftToRight, new Typeface("Arial"), 12, SystemColors.WindowTextBrush ), new Point(0, 0) ); } } }
|
정의한 CustomElement 를 아래와 같이 사용하면 Number 에 정의한 내용이 화면에 표시됩니다.
<Window x:Class="WpfApp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:src="clr-namespace:WpfApp" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <DockPanel> <src:CustomElement Number="50"/> </DockPanel> </Window>
|
'C# > WPF' 카테고리의 다른 글
[WPF] Control 의 ControlTemplate 구조 나타내는 프로그램 (0) | 2020.07.11 |
---|---|
[WPF] Style.Triggers 이용하여 Control 변화 주기 (0) | 2020.07.10 |
[WPF] PageFunction (0) | 2020.07.09 |
[WPF] 화면 중앙에 출력하기, content 에 맞춰 화면 크기 조정하기 (0) | 2020.07.09 |
[WPF] static member 사용하기 (0) | 2020.07.09 |