无法将资源放在ContentControl中

时间:2014-03-25 13:09:40

标签: c# xaml windows-runtime winrt-xaml

此XAML在Windows应用商店应用中不起作用:

<ContentControl Grid.Column="1" Content="{StaticResource AddUserStep1Control}" />

将用户控件作为资源加载到App.xaml中,如下所示:

<featuresUsers:BoyGirlPickerUserControl x:Key="AddUserStep1Control" />

控件看起来像这样:

<UserControl>

.. namespace etc.

    <Grid>
        <Grid.Resources>
            <Style TargetType="Button">
                <Setter Property="Margin" Value="10" />
                <Setter Property="FontSize" Value="96" />
                <Setter Property="Padding" Value="50, 20" />
            </Style>
        </Grid.Resources>
        <StackPanel>
            <TextBlock HorizontalAlignment="Center" FontSize="96" Margin="0,50,0,30">I am a...</TextBlock>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
                <Button>Boy</Button>
                <Button>Girl</Button>
            </StackPanel>
        </StackPanel>
    </Grid>
</UserControl>

据我了解,ContentControl可以包含任何内容。我将Content属性绑定到视图模型,然后从应用程序资源获取UserControl并将其设置在view-model属性上,但这又导致了另一个错误,导致我尝试全部在XAML。

我能够在视图模型中的代码中实例化TextBlock并将其设置在绑定属性上,并在UI中查看该控件和文本,但UserControl则不然。 / p>

以下是错误消息:

  

类型的第一次机会异常   &#39; Windows.UI.Xaml.Markup.XamlParseException&#39;发生在   GlyphWriterStoreApp.exe

     

WinRT信息:无法分配给属性   &#39; Windows.UI.Xaml.Controls.ContentControl.Content&#39;因为类型   &#39; Windows.UI.Xaml.Controls.UserControl&#39;无法分配到该类型   &#39;对象&#39 ;. [行:55位置:45]

     

其他信息:与此错误代码相关联的文本可以   找不到。

     

无法分配属性   &#39; Windows.UI.Xaml.Controls.ContentControl.Content&#39;因为类型   &#39; Windows.UI.Xaml.Controls.UserControl&#39;无法分配到该类型   &#39;对象&#39 ;. [行:55位置:45]

     

如果存在此异常的处理程序,则程序可能是安全的   继续进行。

更新1

所以问题是将资源控制设置为Content。我刚刚尝试使用TextBlock App.xaml并在{{1}}中声明了该错误。

1 个答案:

答案 0 :(得分:1)

似乎是一个已知问题。

http://social.msdn.microsoft.com/Forums/silverlight/en-US/9076af75-07e2-40b4-8890-6ea546d1e9de/cant-use-staticresource-as-content-of-contentcontrol

这很奇怪,因为即使在代码中加载资源,产生任何控件的实例,也不起作用,而在代码中实例化控件确实有效,即使它们是相同的。

他们只是对象引用。很奇怪。看起来我必须在运行时动态实例化我的控件类型或使用模板选择器。