Подтвердить что ты не робот

Укажите, какое свойство находится между тегом открытия и закрытия в Xaml

Рассмотрим следующий Xaml

<Grid>
    <TextBox>Text</TextBox>
    <Button>Content</Button>
</Grid>

Он установит

  • Текстовое свойство TextBox (только WPF)
  • Свойство содержимого кнопки
  • Детское свойство сетки

Но как это указано? Как указать, какое свойство находится между тегом открытия и закрытия в Xaml?
Установлено ли это некоторыми метаданными в свойстве Dependency или что?

Спасибо

4b9b3361

Ответ 1

Существует класс ContentPropertyAttribute, который применяется к классу. WPF/Silverlight будет использовать отражение, чтобы определить, какое свойство использовать.

Если вы хотите сделать это с помощью пользовательского класса, вы можете сделать это следующим образом:

[ContentProperty("Bar")]
public class Foo : Control
{
    public static DependencyProperty BarProperty = DependencyProperty.Register(
        "Bar",
        typeof(int),
        typeof(Foo),
        new FrameworkPropertyMetaData(0));

    public int Bar
    {
        get { return (int)GetValue(BarProperty); }
        set { SetValue(BarProperty, value); }
    }
}

Затем вы можете указать его в XAML так:

<lcl:Foo>12</lcl:Foo>

Обновление

Поскольку он использует отражение, вам действительно не нужно делать DependencyProperty. Например, это также будет работать:

[ContentProperty("Bar")]
public class Foo : Control
{
    public int Bar { get; set; }
}