WPF-종속성 속성
WPF 응용 프로그램에서 종속성 속성은 CLR 속성을 확장하는 특정 유형의 속성입니다. WPF 속성 시스템에서 사용할 수있는 특정 기능을 활용합니다.
종속성 속성을 정의하는 클래스는 DependencyObject수업. XAML에서 사용되는 많은 UI 컨트롤 클래스는DependencyObject 클래스는 종속성 속성을 지원합니다. 예를 들어 Button 클래스는 IsMouseOver 종속성 속성.
다음 XAML 코드는 일부 속성이있는 단추를 만듭니다.
<Window x:Class = "WPFDependencyProperty.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "clr-namespace:WPFDependencyProperty"
Title = "MainWindow" Height = "350" Width = "604">
<Grid>
<Button Height = "40" Width = "175" Margin = "10" Content = "Dependency Property">
<Button.Style>
<Style TargetType = "{x:Type Button}">
<Style.Triggers>
<Trigger Property = "IsMouseOver" Value = "True">
<Setter Property = "Foreground" Value = "Red" />
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</Grid>
</Window>
XAML의 x : Type 태그 확장에는 C #의 typeof ()와 유사한 기능이 있습니다. <Style TargetType = "{x : Type Button}">과 같은 객체 유형을 취하는 속성이 지정 될 때 사용됩니다.
위의 코드를 컴파일하고 실행하면 다음과 같은 결과를 얻을 수 있습니다. MainWindow. 마우스가 버튼 위에 있으면 버튼의 전경색이 변경됩니다. 마우스가 버튼을 떠나면 원래 색상으로 다시 변경됩니다.
종속성 속성이 필요한 이유
종속성 속성은 응용 프로그램에서 사용할 때 모든 종류의 이점을 제공합니다. 종속성 속성은 다음 시나리오에서 CLR 속성을 통해 사용할 수 있습니다-
- 스타일을 설정하려면
- 데이터 바인딩을 원하는 경우
- 리소스 (정적 또는 동적 리소스)로 설정하려는 경우
- 애니메이션을 지원하고 싶다면
기본적으로 종속성 속성은 CLR 속성을 사용하여 얻을 수없는 많은 기능을 제공합니다.
주요 차이점 dependency properties 및 기타 CLR properties 아래에 나열되어 있습니다-
CLR 속성은 다음을 사용하여 클래스의 전용 멤버에서 직접 읽고 쓸 수 있습니다. getter 과 setter. 반대로 종속성 속성은 로컬 개체에 저장되지 않습니다.
종속성 속성은 DependencyObject 클래스에서 제공하는 키 / 값 쌍의 사전에 저장됩니다. 또한 변경 될 때 속성을 저장하기 때문에 많은 메모리를 절약합니다. XAML에서도 바인딩 할 수 있습니다.
사용자 지정 종속성 속성
.NET Framework에서 사용자 지정 종속성 속성도 정의 할 수 있습니다. 아래 단계에 따라 C #에서 사용자 지정 종속성 속성을 정의합니다.
신고 및 등록 dependency property 시스템 호출 레지스터로.
제공 setter 과 getter 재산을 위해.
정의 static handler 전 세계적으로 발생하는 모든 변경 사항을 처리합니다.
정의 instance handler 특정 인스턴스에 발생하는 모든 변경 사항을 처리합니다.
다음 C # 코드는 종속성 속성을 정의하여 SetText 사용자 정의 컨트롤의 속성입니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication3 {
/// <summary>
/// Interaction logic for UserControl1.xaml
/// </summary>
public partial class UserControl1 : UserControl {
public UserControl1() {
InitializeComponent();
}
public static readonly DependencyProperty SetTextProperty =
DependencyProperty.Register("SetText", typeof(string), typeof(UserControl1), new
PropertyMetadata("", new PropertyChangedCallback(OnSetTextChanged)));
public string SetText {
get { return (string)GetValue(SetTextProperty); }
set { SetValue(SetTextProperty, value); }
}
private static void OnSetTextChanged(DependencyObject d,
DependencyPropertyChangedEventArgs e) {
UserControl1 UserControl1Control = d as UserControl1;
UserControl1Control.OnSetTextChanged(e);
}
private void OnSetTextChanged(DependencyPropertyChangedEventArgs e) {
tbTest.Text = e.NewValue.ToString();
}
}
}
다음은 TextBlock이 사용자 정의 컨트롤로 정의되고 Text 속성이 SetText 종속성 속성에 의해 할당되는 XAML 파일입니다.
다음 XAML 코드는 사용자 정의 컨트롤을 만들고 초기화합니다. SetText 종속성 속성.
<Window x:Class = "WpfApplication3.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:views = "clr-namespace:WpfApplication3"
Title = "MainWindow" Height = "350" Width = "604">
<Grid>
<views:UserControl1 SetText = "Hellow World"/>
</Grid>
</Window>
이 애플리케이션을 실행 해 보겠습니다. MainWindow에서 사용자 컨트롤의 종속성 속성이 Text로 성공적으로 사용되었음을 즉시 확인할 수 있습니다.