wpf dependency property add owner

120
30 апреля 2021, 08:10

В книге Петцольда есть следующий пример:

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
namespace Petzold.SetSpaceProperty
{
    public class SpaceWindow: Window
    {
        public static readonly DependencyProperty SpaceProperty;
        public int Space
        {
            set
            {
                SetValue(SpaceButton.SpaceProperty, value);
            }
            get
            {
                return (int)GetValue(SpaceButton.SpaceProperty);
            }
        }
        static SpaceWindow()
        {
            FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata() { Inherits = true};
            SpaceProperty = SpaceButton.SpaceProperty.AddOwner(typeof(SpaceWindow));
            SpaceButton.SpaceProperty.OverrideMetadata(typeof(SpaceWindow), metadata);
            Console.WriteLine(SpaceButton.SpaceProperty.GetMetadata(typeof(SpaceWindow)).DefaultValue);
            Console.WriteLine(SpaceProperty.GetMetadata(typeof(SpaceWindow));
        }
    }
}

Подскажите, пожалуйста, зачем нужен метод AddOwner у зависимых свойств и в чём разница, между вызовом этого метода и переопределение метаданных для свойства зависимости? Если закомментировать вызов данного метода, программа всё равно выполняется.

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
namespace Petzold.SetSpaceProperty
{
    public class SpaceWindow: Window
    {
        //public static readonly DependencyProperty SpaceProperty;
        public int Space
        {
            set
            {
                SetValue(SpaceButton.SpaceProperty, value);
            }
            get
            {
                return (int)GetValue(SpaceButton.SpaceProperty);
            }
        }
        static SpaceWindow()
        {
            FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata() { Inherits = true};
            //SpaceProperty = SpaceButton.SpaceProperty.AddOwner(typeof(SpaceWindow));
            SpaceButton.SpaceProperty.OverrideMetadata(typeof(SpaceWindow), metadata);
            Console.WriteLine(SpaceButton.SpaceProperty.GetMetadata(typeof(SpaceWindow)).DefaultValue);
            //Console.WriteLine(SpaceProperty.GetMetadata(typeof(SpaceWindow));
        }
    }
}
READ ALSO
Как записать консольный код AngleSharp в форме?

Как записать консольный код AngleSharp в форме?

На вебстранице показан код парсера в консолиХотелось бы научиться получать результат парсинга сайта в textbox формы

118
Как подружить Gulp и его browser-sync с PHP?

Как подружить Gulp и его browser-sync с PHP?

Как подружить Gulp и его browser-sync с PHP? ЧТО НАДО ПОМЕНЯТЬ В gulpfilejs чтобы он обновлял страницу при изменении php

212