XAML预定义类型(例如x:Double)

时间:2014-10-02 18:28:35

标签: wpf xaml

那么,这里有什么问题......在一个WPF应用程序中,我在ResourceDictionary中定义了x-namespace:

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

然后我试图实例化一个双精度词:

 <x:Double x:Key="BorderWidth">30</x:Double>

但它没有编译时错误,表明不支持x:Double。

对于记录,以下工作(如果我将sys-namespace映射到mscorlib):

<sys:Double x:Key="BorderWidth">30.0</sys:Double>

2 个答案:

答案 0 :(得分:0)

雅这些很奇怪,可以轻松搞定你。实际上你试图使用它的不仅仅是一个Double,它是四个,分别为Top,Right,Left,Bottom。

因此,而不是sys:Double,你会想要使用Thickness来代替;

<Thickness x:Key="BorderWidth">30</Thickness>

希望这会有所帮助,欢呼。

答案 1 :(得分:0)

XAML的内置基元类型仅在XAML 2009命名空间(http://schemas.microsoft.com/winfx/2009/xaml)中可用。如果您使用2006命名空间(http://schemas.microsoft.com/winfx/2006/xaml),这些原语将无法使用。 MSDN关于XAML原语的文章有一个很好的解释:http://msdn.microsoft.com/en-us/library/ee792002(v=vs.110).aspx

修改:还有一个警告:

  

在WPF中,您可以使用XAML 2009功能,但仅适用于非XAML   标记编译。用于WPF的标记编译的XAML和用于WPAM的BAML形式   XAML目前不支持XAML 2009关键字和功能。一个   您可以将XAML 2009功能与WPF一起使用的场景是if   您创建了松散的XAML,然后将该XAML加载到WPF运行时   和XamlReader.Load的对象图。 WPF   System.Windows.Markup.XamlReader及其Load可以处理XAML 2009   语言关键字和功能成为有效的对象图   表示。

如果您正在编译XAML,这些原语仍然无法正常工作,因此您必须映射一个&#34;系统&#34;正如您在问题中提供的示例中所做的那样,命名空间为System/mscorlib

此外,根据您的资源键BorderWidth的上下文,您可能无法将Double用于预期目的。请参阅Chris W的答案(我不应该投票,我真的很抱歉!)