如何在UWP XAML中添加变量?添加String资源遇运行时错误
UWP XAML中正确添加变量及错误解决
错误原因
你遇到的ReflectionHelperException是因为UWP XAML的类型系统对System.String存在特殊映射逻辑,直接通过system:String声明资源会触发反射时的类型名称不匹配问题——创建的XAML类型标识为String,但系统请求的是完整命名空间的System.String。
正确解决方案
方案1:使用UWP内置的x:String简化声明(推荐)
直接利用页面根元素已引入的x命名空间声明字符串资源,无需额外引入system命名空间,代码更简洁且无兼容性问题:
<Page x:Class="UwpTest.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:UwpTest" 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> <!-- 替换system:String为x:String --> <x:String x:Key="var1">1.2</x:String> </Page.Resources> <Grid> </Grid> </Page>
方案2:通过项目配置关闭类型信息反射
如果需要保留system:String的声明方式,可以按照错误提示修改项目的.csproj文件,添加以下配置节点:
<PropertyGroup> <EnableTypeInfoReflection>false</EnableTypeInfoReflection> </PropertyGroup>
保存配置后重新编译项目,即可解决反射错误。
其他基本类型变量的声明示例
对于其他常用基本类型,同样可以使用x命名空间下的对应类型直接声明:
- 整数类型:
<x:Int32 x:Key="varInt">100</x:Int32> - 浮点类型:
<x:Double x:Key="varDouble">3.14</x:Double> - 布尔类型:
<x:Boolean x:Key="varBool">True</x:Boolean>
内容的提问来源于stack exchange,提问作者Syaiful Nizam Yahya
相关产品推荐
相关产品推荐

