WPF—PropertyMetadata

作者:追风剑情 发布于:2019-8-14 21:30 分类:C#

示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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 WpfApp5
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        Student stu = new Student();

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Console.WriteLine("Name={0}", stu.Name);
            stu.Name = "New-Name";
            Console.WriteLine("Name={0}", stu.Name);
        }
    }
}

public class Student : DependencyObject
{

    public string Name
    {
        get { return (string)GetValue(NameProperty); }
        set { SetValue(NameProperty, value); }
    }

    // 值变换时回调
    private static void NameChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        Console.WriteLine("Name={0}", e.NewValue);
    }

    // 校验值回调
    private static object NameCoerceCallback(DependencyObject d, object baseValue)
    {
        Console.WriteLine("NameCoerceCallback: baseValue={0}", baseValue);
        baseValue += "-Coerce";
        return baseValue;
    }

    public static readonly DependencyProperty NameProperty =
        DependencyProperty.Register(
            "Name",
            typeof(string),
            typeof(Student),
            new PropertyMetadata("Default-Name", NameChangedCallback, NameCoerceCallback)
        );
}

运行测试 (点击按钮后的输出)

11111.png

标签: C#

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号