我在设置一个简单的ContentPresenter
时遇到了问题。
当我开始新的UWP项目时,请将MainPage
内容更改为
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ContentPresenter Content="{Binding TheContent}" />
</Grid>
并将其代码设置为
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
this.DataContext = new ViewModel();
}
}
public class ViewModel
{
public string TheContent { get { return "Hello World."; } }
}
我希望ContentPresenter
只创建一个TextBlock
,Text
属性设置为“Hello World”。至少它在WPF中以这种方式工作。
相反,没有显示任何内容,我在输出中有一个Binding错误:
错误:BindingExpression路径错误:'Windows.Foundation.IReference`1'上找不到'TheContent'属性。 BindingExpression: Path ='TheContent'DataItem ='Windows.Foundation.IReference`1'; target元素是'Windows.UI.Xaml.Controls.ContentPresenter' (名称= '空'); target属性是'Content'(类型'Object')
在我看来,ContentPresenter
尝试使用它所在的页面呈现它的内容?
当我明确地将ContentTemplate
设置为TextBlock
时,一切正常,但使用基于ContentTemplateSelector
返回DataTemplate
的{{1}},我有和以前一样的错误。
我错过了什么?
答案 0 :(得分:4)
如果您没有创建模板,则应使用ContentControl
ContentPresenter
通常用作ControlTemplate
ContentControl
的一部分。
<强>说明强>
通常,您直接使用
ContentPresenter
ControlTemplate
的{{1}}标记内容的位置 出现了。
ContentControl
通常用于将特征应用于文本 content,仅使用字符串设置为ContentPresenter
属性 文本(或一些间接等价物,如Binding或RESX 资源)。出于这个原因,Content
的属性是 类似于ContentPresenter
类的属性。 (TextElement
class是几个不是控件的元素的基类 用于格式化可能出现在控件或布局中的文本 容器。)
说明
当您在TextElement
的{{1}}中放置ContentPresenter
时,它会自动显示模板化控件的内容。这意味着,如果将ControlTemplate
的{{1}}设置为Button,则ContentControl
的Content属性将隐式绑定到使用该TargetType
的按钮的内容}。
要设置ControlTemplate
属性的绑定,您可能需要考虑使用ContentPresenter
属性。 ControlTemplate
属性指向模板化父级上的属性,并自动为关联的模板和模板选择器属性别名。