XAML - Propriedades de Dependência
Uma propriedade de dependência é um tipo específico de propriedade em que o valor é seguido por um sistema de propriedades avançado que também faz parte do Aplicativo do Windows Runtime. Uma classe que define uma propriedade de dependência deve ser herdada da classe DependencyObject.
Muitas das classes de controle da IU que são usadas em XAML são derivadas da classe DependencyObject e oferecem suporte a propriedades de dependência. O código XAML a seguir cria um botão com algumas propriedades.
<Window x:Class = "XAMLDependencyProperty.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "clr-namespace:XAMLDependencyProperty"
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>
A extensão de marcação x: Type em XAML tem uma funcionalidade semelhante, como typeof () em C #. É usado quando os atributos são especificados que assumem o tipo do objeto, como <Style TargetType = "{x: Type Button}">
Quando você compila e executa o código acima, ele produzirá a seguinte MainWindow. Quando o mouse estiver sobre o botão, ele mudará a cor do primeiro plano do botão. Quando o mouse sair do botão, ele voltará à cor original.
A principal diferença entre propriedades de dependência e outras propriedades CLR são -
As propriedades CLR podem ler / gravar diretamente do membro privado de uma classe usando getter e setter. No caso de propriedades de dependência, ele não é armazenado em um objeto local.
As propriedades de dependência são armazenadas em um dicionário de pares de chave / valor que é fornecido pela classe DependencyObject.
Ele também economiza muita memória porque armazena a propriedade quando alterada.
Ele também pode ser vinculado a XAML.
No .NET framework, as propriedades de dependência personalizadas também podem ser definidas. Aqui estão as etapas para definir a propriedade de dependência personalizada em C #.
Declare e registre sua propriedade de dependência com o registro de chamadas do sistema.
Fornece o setter e getter para a propriedade.
Defina um manipulador estático para lidar com quaisquer mudanças que ocorram globalmente.
Defina um manipulador de instância para lidar com qualquer alteração que ocorra nessa instância específica.
A seguir é fornecido o código em C # para a propriedade de dependência definida para definir a propriedade SetText do controle do usuário.
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();
}
}
}
Aqui está o arquivo XAML no qual o TextBlock é definido como um controle de usuário e a propriedade Text será atribuída a ele pela propriedade de dependência SetText.
O código XAML a seguir cria um controle de usuário com a inicialização de sua propriedade de dependência SetText e algumas outras propriedades.
<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>
Vamos executar este aplicativo e você pode ver imediatamente em nossa MainWindow que a propriedade de dependência para controle de usuário foi usada com sucesso como um Texto.