指定 Xaml 中开始标记和结束标记之间的属性

发布于 2024-10-11 09:12:23 字数 338 浏览 1 评论 0原文

考虑以下 Xaml

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

它将设置

  • TextBox 的 Text 属性 (仅限 WPF)
  • 按钮的内容属性
  • Grid 的子属性

但这是如何指定的?如何指定 Xaml 中开始标记和结束标记之间的属性?
这是由依赖属性中的某些元数据设置的还是什么?

谢谢

Consider the following Xaml

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

It will set the

  • Text Property of a TextBox (only WPF)
  • Content Property of a Button
  • Children Property of a Grid

But how is this specified? How do you specify which Property that goes between the opening and closing tag in Xaml?
Is this set by some metadata in the Dependency Property or what?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

苍白女子 2024-10-18 09:12:23

有一个应用于类的 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>

更新

由于它使用反射,因此您实际上不需要这样做一个依赖属性。例如,这也将起作用:

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

There is a ContentPropertyAttribute that is applied to a class. WPF/Silverlight will use reflection to determine which property to use.

If you want to do this with a custom class, you can do it like so:

[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); }
    }
}

Then you could specify it in XAML like so:

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

Update

Since it is using reflection, you don't really need to do a DependencyProperty. For instance, this will also work:

[ContentProperty("Bar")]
public class Foo : Control
{
    public int Bar { get; set; }
}   
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文