XAML - คุณสมบัติการพึ่งพา

คุณสมบัติการพึ่งพาคือคุณสมบัติเฉพาะประเภทที่ค่าตามด้วยระบบคุณสมบัติที่กระตือรือร้นซึ่งเป็นส่วนหนึ่งของ Windows Runtime App คลาสที่กำหนดคุณสมบัติการอ้างอิงต้องสืบทอดจากคลาส DependencyObject

คลาสควบคุม UI จำนวนมากที่ใช้ใน XAML ได้รับมาจากคลาส DependencyObject และคุณสมบัติการพึ่งพาสนับสนุน โค้ด XAML ต่อไปนี้สร้างปุ่มที่มีคุณสมบัติบางอย่าง

<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>

ส่วนขยายมาร์กอัป x: Type ใน XAML มีฟังก์ชันการทำงานที่คล้ายกันเช่น typeof () ใน C # ใช้เมื่อมีการระบุแอตทริบิวต์ที่ใช้ประเภทของวัตถุเช่น <Style TargetType = "{x: Type Button}">

เมื่อคุณคอมไพล์และรันโค้ดข้างต้นจะสร้าง MainWindow ดังต่อไปนี้ เมื่อเมาส์อยู่เหนือปุ่มจะเปลี่ยนสีพื้นหน้าของปุ่ม เมื่อเมาส์ออกจากปุ่มมันจะเปลี่ยนกลับเป็นสีเดิม

ความแตกต่างที่สำคัญระหว่างคุณสมบัติการพึ่งพาและคุณสมบัติ CLR อื่น ๆ คือ -

  • คุณสมบัติ CLR สามารถอ่าน / เขียนโดยตรงจากสมาชิกส่วนตัวของคลาสโดยใช้ getter และ setter. ในกรณีของคุณสมบัติการพึ่งพาจะไม่ถูกเก็บไว้ในวัตถุภายใน

  • คุณสมบัติการพึ่งพาจะถูกเก็บไว้ในพจนานุกรมของคู่คีย์ / ค่าซึ่งจัดเตรียมโดยคลาส DependencyObject

  • นอกจากนี้ยังช่วยประหยัดหน่วยความจำได้มากเนื่องจากเก็บทรัพย์สินเมื่อมีการเปลี่ยนแปลง

  • สามารถผูกไว้ใน XAML ได้เช่นกัน

ใน. NET framework ยังสามารถกำหนดคุณสมบัติการอ้างอิงแบบกำหนดเองได้ นี่คือขั้นตอนในการกำหนดคุณสมบัติการอ้างอิงแบบกำหนดเองใน C #

  • ประกาศและลงทะเบียนคุณสมบัติการพึ่งพาของคุณด้วยทะเบียนการโทรของระบบ

  • จัดเตรียม setter และ getter สำหรับคุณสมบัติ

  • กำหนดตัวจัดการแบบคงที่เพื่อจัดการกับการเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นทั่วโลก

  • กำหนดตัวจัดการอินสแตนซ์เพื่อจัดการกับการเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นกับอินสแตนซ์นั้น ๆ

ให้ด้านล่างนี้คือรหัสใน 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();
      }
   }
}

นี่คือไฟล์ XAML ซึ่ง TextBlock ถูกกำหนดให้เป็นตัวควบคุมผู้ใช้และคุณสมบัติข้อความจะถูกกำหนดโดยคุณสมบัติการอ้างอิง SetText

โค้ด 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>

ลองเรียกใช้แอปพลิเคชันนี้และคุณจะเห็นได้ทันทีในหน้าต่างหลักของเราว่าคุณสมบัติการอ้างอิงสำหรับการควบคุมผู้ใช้ถูกใช้เป็นข้อความสำเร็จ