Wpf 속성 종속 추가 속성
13930 단어 WPF
의존 속성은 자신이 값이 없는 것이다. Binding을 통해 데이터 원본에서 값을 얻는 것은 바로 다른 사람에게 의존하는 것이다. 의존 속성을 가진 대상을 의존 대상이라고 한다.
속성에 의존하는 장면은 다음과 같습니다.
1. 스타일에서 속성을 설정할 수 있기를 바랍니다.
2. 속성이 데이터 귀속을 지원하기를 바랍니다.
3. 동적 자원 인용을 사용하여 속성을 설정할 수 있기를 바랍니다.
4. 요소 트리의 부모 요소에서 자동으로 속성 값을 상속하기를 원합니다.
5. 애니메이션 처리를 위한 속성을 원합니다.
6. 속성 시스템이 속성 시스템, 환경 또는 사용자가 수행한 작업이나 스타일을 사용하여 속성의 이전 값을 변경했을 때 보고하기를 바란다.
7. 설정된 WPF 프로세스에서도 사용되는 메타데이터 규약을 사용하고자 합니다. 예를 들어 속성 값을 변경할 때 레이아웃 시스템에 요소의 시각적 대상을 다시 작성해야 하는지 여부를 보고합니다.
의존 대상이 생성될 때 저장 데이터 공간을 포함하지 않습니다.WPF에서는 종속 객체를 종속 속성의 숙주로 사용해야 합니다.
종속 속성 선언 및 사용
알림: 의존 속성을 만들 때 코드 세션propdp를 사용할 수 있습니다
1 <Window x:Class="DeepXAML.MainWindow"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:local="clr-namespace:DeepXAML"
5 xmlns:sys="clr-namespace:System;assembly=mscorlib"
6 Title="MainWindow" Height="250" Width="450">
7 <StackPanel x:Name="stackPanel">
8 <TextBox x:Name="textBox1" Margin="10" Text="{Binding Path=Title}"></TextBox>
9 <TextBox x:Name="textBox2" Margin="10" Text="{Binding Path=Title}"></TextBox>
10 </StackPanel>
11 </Window>
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Data;
using System.Windows.Documents;
namespace DeepXAML
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Game game = new Game { Title = "WarCraft" };
this.stackPanel.DataContext = game;
}
}
public class Game:DependencyObject
{
public string Title
{
get { return (string)GetValue(NameProperty); }
set { SetValue(NameProperty, value); }
}
// Using a DependencyProperty as the backing store for Name. This enables animation, styling, binding, etc...
public static readonly DependencyProperty NameProperty =
DependencyProperty.Register("Title", typeof(string), typeof(Game));
}
}
DependencyProperty.Register 메소드 해석
a. 첫 번째 매개변수는 종속 속성으로 포장할 CLR 속성을 나타냅니다.
b. 두 번째 매개 변수는 속성에 의존하는 저장 기간의 어떤 유형의 값을 가리킨다
c. 이 의존 속성 숙주의 유형.
속성에 의존하는 값은 어디에 존재합니까?
WPF가 실행될 때, 전역적으로Hashtable 액세스 의존 속성의 값을 유지합니다.
2. 추가 속성
부가 속성은 자신이 이 속성이 없으면 어떤 상하문에서 필요하면 부가되는 것이다.예를 들면 TextBox의 Grid.Row 속성, 만약 우리가 TextBox 클래스를 정의할 때 Row 속성을 정의하는 것은 무의미하다. 왜냐하면 우리는 반드시 Grid에 넣을 줄 모르기 때문에 낭비를 초래하기 때문이다.
1 01 <Window x:Class="DeepXAML.MainWindow"
2 02 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 03 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 04 xmlns:local="clr-namespace:DeepXAML"
5 05 xmlns:sys="clr-namespace:System;assembly=mscorlib"
6 06 Title="MainWindow" Height="250" Width="450">
7 07 <Grid>
8 08 <Grid.RowDefinitions>
9 09 <RowDefinition Height="2*"></RowDefinition>
10 10 <RowDefinition></RowDefinition>
11 11 </Grid.RowDefinitions>
12 12 <TextBox Grid.Row="0"></TextBox>
13 13 <TextBox Grid.Row="1"></TextBox>
14 14 </Grid>
15 15 </Window>
실제로 컴파일한 후에 Grid.Row는 Grid의 클래스에서 SetRow 방법을 생성하고 Grid는 컨트롤을 조정합니다.즉 추가 속성은 생성 방법으로 메모리 공간을 차지하지 않는다.
1 public class GameAP : DependencyObject
2 {
3 public static int GetName(DependencyObject obj)
4 {
5 return (int)obj.GetValue(NameProperty);
6 }
7
8 public static void SetName(DependencyObject obj, int value)
9 {
10 obj.SetValue(NameProperty, value);
11 }
12
13 // Using a DependencyProperty as the backing store for Name. This enables animation, styling, binding, etc...
14 public static readonly DependencyProperty NameProperty =
15 DependencyProperty.RegisterAttached("Name", typeof(int), typeof(GameAP), new UIPropertyMetadata(0));
16
17 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MaterialDesign의 ComboBox HasClearButton 크기 변경WPF MaterialDesign은 편리하지만 때로는 표시가 너무 크거나 약간 사용하기 쉽습니다. ComboBox를 사용할 때 선택한 버튼을 지우려면 지우기 버튼을 표시할 수 있습니다. 아래와 같은 표시가 됩니다 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.