C# 指定哪个属性位于Xaml中的开始标记和结束标记之间
考虑以下XamlC# 指定哪个属性位于Xaml中的开始标记和结束标记之间,c#,wpf,silverlight,xaml,windows-phone-7,C#,Wpf,Silverlight,Xaml,Windows Phone 7,考虑以下Xaml <Grid> <TextBox>Text</TextBox> <Button>Content</Button> </Grid> 正文 内容 这将决定未来 文本框的文本属性(仅WPF) 按钮的内容属性 网格的子属性 但这是如何规定的呢?如何在Xaml中指定介于开始标记和结束标记之间的属性? 这是由依赖项属性中的某个元数据设置的还是什么 谢谢有一个应用于类的ContentPropert
<Grid>
<TextBox>Text</TextBox>
<Button>Content</Button>
</Grid>
正文
内容
这将决定未来
- 文本框的文本属性(仅WPF)
- 按钮的内容属性
- 网格的子属性
这是由依赖项属性中的某个元数据设置的还是什么
谢谢有一个应用于类的
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>
这是一个很好的问题,我也想知道。事实上,你不能用
TextBox
@AnthonyWJones:Text
这样做。什么意思?查看带有Reflector的TextBox.cs,我可以看到它只在WPF中有ContentProperty(“Text”)
,而不是在Silverlight或WP7中。@AnthonyWJones:我明白了,你说得对:)和往常一样,Silverlight中的情况不一样。很好的输入,我将编辑问题并将其更改为适用于Silverlight和WP7的内容。关于ContentProperty
的部分是正确的,但是至少在Silverlight和WP7中,指定的属性不需要是依赖性属性。Silverlight/WP7仅使用反射来查找由ContentProperty
属性指定的属性,因此content属性可以是任何类型可由Xaml解析的属性。@AnthonyWJones-这一点很好。我更新了答案以显示任何属性都可以使用。我认为您的示例中存在错误。结束标记还需要指定名称空间,不是吗?
[ContentProperty("Bar")]
public class Foo : Control
{
public int Bar { get; set; }
}