Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 指定哪个属性位于Xaml中的开始标记和结束标记之间_C#_Wpf_Silverlight_Xaml_Windows Phone 7 - Fatal编程技术网

C# 指定哪个属性位于Xaml中的开始标记和结束标记之间

C# 指定哪个属性位于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

考虑以下Xaml

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

正文
内容
这将决定未来

  • 文本框的文本属性(仅WPF)
  • 按钮的内容属性
  • 网格的子属性
但这是如何规定的呢?如何在Xaml中指定介于开始标记和结束标记之间的属性?
这是由依赖项属性中的某个元数据设置的还是什么


谢谢

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