728x90
1. DependencyProperty 란?
DependencyProperty 란 프로퍼티 값이 변경되었을 때 자동으로 어떤 일을 처리하게 할 수 있게 해주는 것입니다.
스타일링, 데이터 바인딩, 애니메이션 등 WPF 주요 부분에 사용합니다.
DependencyProperty를 사용하면 엘리먼트를 사용하는 시점에 프로퍼티 값이 결정되고, Static 변수이기 때문에 메모리 절약에 효과적입니다. 그리고 프로퍼티를 구현할 때 필요한 많은 코드를 표준화할 수 있습니다.
2. 예제
예제로는 UserControl에 DependencyProperty를 사용하겠습니다.
UserControl1.xaml
<UserControl x:Class="WpfTriggerAndCommand.UserControls.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfTriggerAndCommand.UserControls"
mc:Ignorable="d"
d:DesignHeight="150" d:DesignWidth="300" x:Name="root">
<Grid>
<StackPanel>
<Label Content="{Binding LabelName,ElementName=root}"></Label>
<Button Width="100" Command="{Binding MyCommand,ElementName=root}">버튼</Button>
</StackPanel>
</Grid>
</UserControl>
UserControl1.cs
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 WpfTriggerAndCommand.UserControls
{
/// <summary>
/// UserControl1.xaml에 대한 상호 작용 논리
/// </summary>
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
//propdp 입력후 빠르게 탭 두번
public string LabelName
{
get { return (string)GetValue(LabelNameProperty); }
set { SetValue(LabelNameProperty, value); }
}
//아래는 의존속성을 추가해주는 코드. 차례대로 이름, 타입, 소유클래스, 기본값
// Using a DependencyProperty as the backing store for LabelName. This enables animation, styling, binding, etc...
public static readonly DependencyProperty LabelNameProperty =
DependencyProperty.Register("LabelName", typeof(string), typeof(UserControl1), new PropertyMetadata(string.Empty));
public ICommand MyCommand
{
get { return (ICommand)GetValue(MyCommandProperty); }
set { SetValue(MyCommandProperty, value); }
}
// Using a DependencyProperty as the backing store for MyCommand. This enables animation, styling, binding, etc...
public static readonly DependencyProperty MyCommandProperty =
DependencyProperty.Register("MyCommand", typeof(ICommand), typeof(UserControl1));
}
}
MainWindow.xaml
<Window
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:WpfTriggerAndCommand"
xmlns:UserControls="clr-namespace:WpfTriggerAndCommand.UserControls" x:Class="WpfTriggerAndCommand.MainWindow"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<StackPanel>
<ProgressBar Height="20" Value="{Binding ProgressValue}"/>
<TextBox x:Name="textBox1"/>
<Button Content="버튼" Command="{Binding Command}" CommandParameter="{Binding Text, ElementName=textBox1}"/>
<!--LabelName,MyCommand는 유저컨트롤에서 지정한 변수이름 -->
<UserControls:UserControl1 Width="300" Height="150" LabelName="내가 생성한 라벨" MyCommand="{Binding Command}"/>
</StackPanel>
</Grid>
</Window>
'C# Programming > WPF' 카테고리의 다른 글
[WPF] UserControl 사용방법 (0) | 2024.05.17 |
---|---|
[WPF] 탭 컨트롤 & 모달, 모달리스 (0) | 2024.05.17 |
[WPF] 화면이동 프레임 (0) | 2024.05.17 |
[WPF] 디자인 깨질때 해결방법 (0) | 2024.05.16 |
[WPF] Settings.settings 만들기 (0) | 2024.05.16 |