Как WPF определяет, какое свойство устанавливать при настройке содержимого элементов в XAML? - PullRequest
2 голосов
/ 18 марта 2012

Надеюсь, мой заголовок понятен ....

Что я имею в виду для примера, когда мы определяем анимацию:

Xaml:

<StoryBoard>
    <DoubleAnimation..../>
</StoryBoard>

Но если мы определим то же самое в коде позади, мы могли бы сделать:

DoubleAnimation myDAnimation = new DoubleAnimation();
.....
StoryBoard myStoryBoard = new StoryBoard();
myStoryBoard.Children.Add(myDAnimation);

Я попытался взглянуть на определение класса StoryBoard, ничего особенного:

public sealed class Storyboard : Timeline
{
        public Storyboard();

        // Summary:
        //     Gets the collection of child System.Windows.Media.Animation.Timeline objects.
        //
        // Returns:
        //     The collection of child System.Windows.Media.Animation.Timeline objects.
        //     The default is an empty collection.
        public TimelineCollection Children { get; }
....
}

Я знаю, если я определю свой собственный класс с помощью приведенного выше синтаксиса, чтобы добавить его в «Дети», мне необходимо:

XAML:

<MyClass>
   <MyClass.Children>
      <MyClassCildrenItem..../>
   </MyClass.Children>
</MyClass>

Так как же Xaml узнал, что DoubleAnimation должен добавить в свойство StoryBoard Children? Если мне нужно сделать то же самое, что я должен объявить?

Ответы [ 2 ]

5 голосов
/ 18 марта 2012

Для этого есть атрибут: ContentPropertyAttribute

Если вы посмотрите раздел классов Syntax в MSDN, вы увидите, какие свойства будут установлены при указании содержимого.Например, ContentControl предназначено для свойства Content.

1 голос
/ 18 марта 2012

TimelineGroup предок Storyboard имеет свойство Children, а также атрибут ContentPropertyAttribute , который указывает свойство Children в качестве свойства содержимого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...