Укажите, какое свойство находится между открывающим и закрывающим тегом в Xaml - PullRequest
11 голосов
/ 07 января 2011

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

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

Он установит

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

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

Спасибо

1 Ответ

17 голосов
/ 08 января 2011

Существует 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; }
}   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...