为 Windows Phone 8.1 app 解决“The type does not support direct content.”的问题

我在 VS 14 CTP 中新建了一个空的 app store 项目名叫 PlayWithXaml ,项目的 MainPage.xaml 文件改为了以下内容:

<Page
    x:Class="PlayWithXaml.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:PlayWithXaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Page.Resources>
        <local:String x:Key="MyText">
            I don‘t feel good
        </local:String>
    </Page.Resources>
    <Grid>
        <Button Content="{StaticResource ResourceKey=MyText}" />
    </Grid>
</Page>

现在的问题是我们先要在 PlayWithXaml 名字空间加入我们的 String 类。

namespace PlayWithXaml
{
    public class String
    {
        public string Content { set; private get; }
        public override string ToString()
        {
            return Content;
        }
    }
}

不幸的是,编译时 VS 告诉我们不能这么做:

Error    1    Missing Content Property definition for Element ‘String‘ to receive content ‘I don‘t feel good‘
Error    2    Unknown member ‘_UnknownContent‘ on element ‘String‘
Error    3    The type ‘String‘ does not support direct content.

如果要修改,我们可以从原来的 xaml 文件下手。为我们的目的着想,我们可以调整一下前面的 xaml 文件的名字空间:

<p:Page
    x:Class="PlayWithXaml.MainPage"
    xmlns:p="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns="using:PlayWithXaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{p:ThemeResource ApplicationPageBackgroundThemeBrush}">
    <p:Page.Resources>
        <String x:Key="MyText">
            I don‘t feel good
        </String>
    </p:Page.Resources>
    <p:Grid>
        <p:Button Content="{p:StaticResource ResourceKey=MyText}"/>
    </p:Grid>
</p:Page>

我们把注意力集中在 MyText 字符串资源的声明上:

<String x:Key="MyText">I don‘t feel good</String>

我们把他改成:

<String x:Key="MyText" Content="I don‘t feel good"/>

这下编译就通过了。

或者我们可以改为更冗长的、语义相同的另一种形式:

<String x:Key="MyText" >
        <String.Content>I don‘t feel good</String.Content>
</String>

是不是看上去更接近目标了?这次多了一个叫 String.Content 的 XAML 节点,也许看上去比前一个方案更糟糕了。

幸运的是, XAML 本身内建了一种机制,允许我们以一开始期望的那种方式做声明:

<String x:Key="MyText">I feel quite good</String>

在 WPF 中我们需要的是一个自定义的 attribute ,System.Windows.Markup.ContentPropertyAttribute(点击访问 MSDN 文档)。在 Windows Phone app 开发中这个 attribute 是 Windows.UI.Xaml.Markup.ContentPropertyAttribute (点击访问 MSDN 文档)

我们需要做的就是给我们的 String 类添加这个 attribute :

namespace PlayWithXaml
{
    using Windows.UI.Xaml.Markup;
    [ContentProperty(Name = "Content")]
    public class String
    {
        public string Content { set; private get; }
        public override string ToString()
        {
            return Content;
        }
    }
}

于是大功告成。

时间: 2024-10-12 19:43:05

为 Windows Phone 8.1 app 解决“The type does not support direct content.”的问题的相关文章

Windows 8.1 store app 开发笔记

零.简介 一切都要从博彦之星比赛说起.今年比赛的主题是使用Bing API(主要提到的有Bing Map API.Bing Translate API和Bing AD API)设计移动应用(Windows store app和Windows phone app).从7月初开始设计到现在,应用的功能已经基本完成,就差美工来给界面优化一下.下面是我设计的应用的功能和实现的方法, 一.BING MAP API 作为一个以Bing Map API为主的应用,主要有以下的功能: 1.定位: 1 priva

个人电脑安装windows server 2008 r2驱动解决办法

近日在研究学习微软下的虚拟化技术,由于种种原因不想在VMware workstation下实验,所以将个人电脑换成了Windows server 2008 r2系统,中途遇到一些问题,现在和大家分享下 首先,刻盘.引导,装系统这里我就不多说了,想换系统的肯定都给这些东西都研究透了,现在我说的是系统装好后,驱动的解决办法. 在这里我给大家提供两套方案: 1.官方下载驱动包(我也是通过这种方法解决了驱动的问题),有人会问了:"官方没有提供服务器版本的驱动呀?"没错,刚开始我一样有这样的困惑

Windows Server 2012启用Windows功能NetFx3时出错解决方法

作者:冰点阳光 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址:http://baohua.me/operating-system/windows-server-2012-enable-windows-feature-netfx3-error-sulotion/ 在Windows server 2012 R2服务器上安装SQL Server 2012数据库,在安装过程中出现"启用Windows 功能NetFx3时出错,错误代码:-2146498298.请尝试从Wind

linux ping通windows但是windows却ping不通linux解决办法

linux可以ping通windows但是windows却ping不通linux解决办法 linux与windows互相通信中存在不通畅情况下可以从以下方面进行排查 1.查看linux 和windows的防火墙是否关闭 2.查看linux系统中NetworkManger服务是否关闭 问题描述: 1.linux可以ping通windows但是windows却ping不通linux 2.查看linux防火墙 3.查看NetworkManager服务是否是开机启动的 4.将NetworkManager

unity3d游戏无法部署到windows phone8手机上的解决方法

今天搞了个unity3d游戏,准备部署到自己的lumia 920上,数据线连接正常,操作正常,但是"build"以后,始终无法部署到手机上,也没有在选择的目录下生产任何相关文件. 但是提示有一个错误: Error building Player: Exception: Error: method `System.Byte[] System.IO.File::ReadAllBytes(System.String)` doesn't exist in target framework. I

Windows 8 Cython 的配置(解决Unable to find vcvarsall.bat问题)

关键是安装之前配置编译器. 1.下载MinGW 编译器 http://www.mingw.org/download.shtml 2.把编译器路径(例如C:\Program Files (x86)\CodeBlocks\MinGW\bin)加入环境变量列表 3.Python路径(例如C:\Python34\Lib\distutils)里面新建一个distutils.cfg文件,内容为以下两行: [build] compiler = mingw32 4.安装Cython.比如通过pip instal

【转】windows 控制台cmd乱码的解决办法

windows 控制台cmd乱码的解决办法 我本机的系统环境: OS Name: Microsoft Windows 10 企业版 OS Version: 10.0.14393 N/A Build 14393 有时在cmd中输出的中文乱码 解决办法如下: 在cmd中输入 CHCP 65001 按Enter键 然后查看不再乱码 注:CHCP是一个计算机指令,能够显示或设置活动代码页编号. 代码页  描述 65001   UTF-8代码页 950 繁体中文 936 简体中文默认的GBK 437 MS

Windows上Tomcat安装以及解决乱码问题

Windows上Tomcat安装以及解决乱码问题 下载tomcat8 1.进入tomcat官网 官方网站 2.选择windows的版本 解压 确定自己配置好了jdk jdk的相关配置 配置好tomcat的环境变量 我的电脑->右键->属性->高级系统设置->环境变量 1.新建两个系统变量CATALINA_HOME.CATALINA_BASE 对应的路径分别是: CATALINA_HOME:F:\J2EE\apache-tomcat-8.5.46 CATALINA_BASE:F:\J

如何解决windows docker共享目录不支持符号链接(do not support symlinks)?

windows使用docker toolbox,搭建前端开发环境时,在共享目录使用npm安装前端依赖时,发现报错,无法使用符号连接. 这里有一个帖子专门讨论这个问题,感兴趣可以看一下: https://askubuntu.com/questio... 我试过了上面所有的法子,发现只有这条有用: $ npm i --no-bin-links 但是这种解决方式会带来另外一个问题:npm run dev 这些命令将无法使用,因为这个共享目录不支持符号连接,而'npm run dev'是需要软连接的.