Xaml 在WinRT中绑定ContentControl的Content属性
假设我有一个Windows应用商店应用程序(针对Windows 8.1),页面上有一个ContentControl,看起来像这样:Xaml 在WinRT中绑定ContentControl的Content属性,xaml,windows-runtime,winrt-xaml,visual-studio-2013,Xaml,Windows Runtime,Winrt Xaml,Visual Studio 2013,假设我有一个Windows应用商店应用程序(针对Windows 8.1),页面上有一个ContentControl,看起来像这样: <ContentControl> <ContentControl.Content> <TextBlock>Hello world</TextBlock> </ContentControl.Content> </ContentControl> <Page.Resources
<ContentControl>
<ContentControl.Content>
<TextBlock>Hello world</TextBlock>
</ContentControl.Content>
</ContentControl>
<Page.Resources>
<TextBlock x:Key="TestContent">Hello world</TextBlock>
</Page.Resources>
<ContentControl Content="{StaticResource TestContent}" />
你好,世界
这非常好,但如果我尝试将内容设置为资源,如下所示:
<ContentControl>
<ContentControl.Content>
<TextBlock>Hello world</TextBlock>
</ContentControl.Content>
</ContentControl>
<Page.Resources>
<TextBlock x:Key="TestContent">Hello world</TextBlock>
</Page.Resources>
<ContentControl Content="{StaticResource TestContent}" />
你好,世界
设计器中的一切看起来都很好,但在运行时出现以下错误:
未能分配给属性
'Windows.UI.Xaml.Controls.ContentControl.Content'
我尝试在不同的地方(app.xaml、单独的资源文件等)定义资源,但每次都会遇到相同的错误
因此,我有一些问题:
我的假设是您正在使用Visual Studio 2012。2012年还有其他此类错误在Visual Studio 2013中解决。您的代码非常完美,在Visual Studio 2013中运行良好
祝你好运 通常,资源是共享的“单个实例”,各种XAML元素都引用单个共享实例。我不知道为什么设计师暗示这会起作用(除了它在支持多种类型的“XAML”方面的传统)。但是,对于
TextBlock
来说,这有点不同,因为您希望元素实例能够被多次复制和实例化(例如,可能托管在多个ContentControl
s中)
WPF有一个使这项工作的特性,在一个名为x:Shared
的特殊属性中。您将其设置为false
,以指示资源
未被共享,并且对该资源的每个请求都应返回一个新实例。WinRT没有相同的功能
有一个完全支持的工作,但是你可以考虑。
一种选择是使用模板,而不是像您尝试的那样直接替换内容:<Page.Resources>
<Style x:Name="replacement" TargetType="ContentControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ContentControl">
<TextBlock FontSize="100" Foreground="Red">Hello!</TextBlock>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ContentControl Style="{StaticResource replacement}"></ContentControl>
</Grid>
谢谢Jerry-不,对不起,我在VS 2013(我的目标是Windows 8.1,我想这需要它)-在设计器中一切似乎都很好,只是在运行时我收到了错误。实际上,这是一个错误,设计者建议代码可以工作。如果你感兴趣的话,我的答案会更详细。答对了!非常好的解释和替代解决方案-非常感谢。