当将标记扩展名x:Arguments
的参数传递给docs指定的非默认构造函数时,我可以看到使用具体数据类型,例如x:Int32
或{{1} },但是x:String
的用例是什么?更重要的是,使用它,标签之间应该放什么? x:Object
在整数或字符串的情况下,很自然地将它们视为变量赋值,然后将变量传递给构造函数。但是在<x:Object> ??? </x:Object>
的情况下,这样的变量通常由另一个用户定义的类构造,那么如何指定要创建的类?
答案 0 :(得分:3)
The x:Object primitive corresponds to Object. This primitive is not typically used in application markup but might be useful for some scenarios such as checking assignability in a XAML type system. You can use as Argument.
Take a look at the Xamarin documentation on Resource Dictionaries for a full explanation on how to use the x:Key attribute of your resources.
Each resource has a key that is specified using the x:Key attribute, which gives it a descriptive key in the ResourceDictionary.
You can use it like below:
<local:MockFactory >
<x:Arguments>
<x:Array Type="{x:Type x:Object}">
<x:String>Foo</x:String>
<x:String>Bar</x:String>
</x:Array>
</x:Arguments>
</local:MockFactory>
you can find a related example here
答案 1 :(得分:2)
从技术上讲,您可以将x:Object
作为构造函数参数传递。 x:Object
对应于具有默认构造函数的System.Object
。所以,如果你有
public class MyClass {
public MyClass(object arg) {
}
}
您可以像这样构建它:
<my:MyClass>
<x:Arguments>
<x:Object />
</x:Arguments>
</my:MyClass>
但这不太有用,因为它将对应
new MyClass(new object());
由于Object
没有任何其他构造函数 - 您无法以任何其他有意义的方式构造它。因此,当构造函数需要对象类型的参数时 - 您不想使用x:Object
而是使用实际类型:
<my:MyClass>
<x:Arguments>
<x:String>string</x:String>
</x:Arguments>
</my:MyClass>
对应
new MyClass("string");
答案 2 :(得分:1)
将数据类型定义为x:Object的数据模板在处理不受支持的类型的数据时是极好的后备数据模板。
假设您有一个显示的屏幕,并通知用户如果他们导入的数据不受支持,他们将看到如下结果:然后显示x:Object的数据模板。一个简单的方法就是这样:
<x:Object></x:Object>
以便可用的最具体的数据模板是x:Object one,这就是显示的内容。
Object类不包含有意义的数据,因此没有任何理由可以编写
function closePrint () {
document.body.removeChild(this.__container__);
}
function setPrint () {
this.contentWindow.__container__ = this;
this.contentWindow.onbeforeunload = closePrint;
this.contentWindow.onafterprint = closePrint;
this.contentWindow.focus(); // Required for IE
this.contentWindow.print();
}
function printPage (sURL) {
var oHiddFrame = document.createElement("iframe");
oHiddFrame.onload = setPrint;
oHiddFrame.style.visibility = "hidden";
oHiddFrame.style.position = "fixed";
oHiddFrame.style.right = "0";
oHiddFrame.style.bottom = "0";
oHiddFrame.src = sURL;
document.body.appendChild(oHiddFrame);
}
因为该类型没有内容。