我想在我的UWP XAML代码中添加一个staticresource,如下所示:
<Page
x:Class="Appnap.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Appnap"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Page.Resources>
<local:MyCoffee CoffeeName="Esperso" Price="10.0" x:Key="okkk">
</local:MyCoffee>
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<TextBlock Name="test" Text="{Binding CoffeeName,Source={StaticResource okkk}}" Margin="155,150,-155,-150" />
</Grid>
我还添加了以下咖啡类:
namespace Appnap
{
public partial class MyCoffee
{
public string CoffeeName { get; set; }
public decimal Price { get; set; }
}
}
当我尝试编译我的代码时,我得到的错误是该值无法分配给价格(XamlCompiler错误WMC0055:无法将文本值'10 .0'分配到'Decimal'类型的属性'Price'中) 我尝试过:10,10.0和10M,但没有任何改变。
答案 0 :(得分:2)
正如XamlCompiler错误所说,问题在于XamlCompiler无法转换文本值&#39; 10.0&#39;进入Decimal
。
在UWP XAML中,它使用名为Type Converter的功能执行转换,将字符串值转换为该值的强类型版本。 Type Converter只是一个具有一个函数的类,即转换字符串值 成为一个强大的类型。并且通用Windows平台API中内置了其中一些。有关详细信息,请参阅:UWP-005 - Understanding Type Converters。
但是,decimal
的类型转换器不在内置UWP API中。 XamlCompiler无法将您在XAML中设置的值解析为TypeConverter
。在WPF中,我们可以使用MyCoffee
类为不受支持的类创建自己的TypeConverter。但是UWP不支持这一点。
作为一种变通方法,您可以在代码隐藏中初始化Binding
并在XAML中使用DataContext
,如下所示:
在代码隐藏中,为页面设置public MainPage()
{
this.InitializeComponent();
//Set DataContext for the page
this.DataContext = new MyCoffee { CoffeeName = "Esperso", Price = 10M };
//Or for the TextBlock
//test.DataContext = new MyCoffee { CoffeeName = "Esperso", Price = 10M };
}
或TextBlock
<TextBlock Name="test" Margin="155,150,-155,-150" Text="{Binding CoffeeName}" />
在XAML中,使用
MyCoffee
这是我们用于绑定的最常用方式。
但是,如果您确实希望将StaticResource
用作Price
,则可以将double
的类型设置为date_added
,这是现有类型转换器支持的。但是,这可能会失去一定的价格准确性,这取决于您的具体数据。
答案 1 :(得分:1)
使用IValueConverter,创建一个新类并实现IValueConverter,在绑定到此属性时选择创建的值转换器。