【问题标题】:How to use x:Object and when?如何使用 x:Object 以及何时使用?
【发布时间】:2017-10-20 08:43:49
【问题描述】:

当通过标记扩展x:Arguments 将参数传递给docs 指定的非默认构造函数时,我可以看到x:Int32x:String 等具体数据类型的使用,但是x:Object?更重要的是,要使用它,标签之间应该放什么? <x:Object> ??? </x:Object>

在整数或字符串的情况下,很自然地将它们视为变量赋值,然后将变量传递给构造函数。但是在Object的情况下,这样的变量一般是由另一个用户定义的类来构造的,那么如何指定要创建的类呢?

【问题讨论】:

    标签: c# xaml xamarin xamarin.forms


    【解决方案1】:

    x:对象

    x:Object 原语对应于 Object。此原语通常不用于应用程序标记,但可能对某些场景很有用,例如检查 XAML 类型系统中的可分配性。您可以用作参数。

    查看Xamarin documentation on Resource Dictionaries,了解如何使用资源的 x:Key 属性的完整说明。

    每个资源都有一个使用 x:Key 属性指定的键, 这在 ResourceDictionary 中为其提供了一个描述性键。

    你可以像下面这样使用它:

    <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>
    

    你可以找到一个相关的例子here

    【讨论】:

    • 我认为您的示例显示的是 x:String,而不是 x:Object。我正在寻找 ... 的用法
    【解决方案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");
    

    【讨论】:

      【解决方案3】:

      将其数据类型定义为 x:Object 的数据模板在处理不受支持的类型的数据时是出色的后备数据模板。

      假设您有一个屏幕显示并通知用户如果他们导入的数据不受支持,他们将看到如下结果:然后您显示 x:Object 的数据模板。一个简单的方法是这样的:

      <ContentControl>
        <ContentControl.Content>
          <x:Object/>
        </ContentControl.Content>
      </ContentControl>
      

      因此可用的最具体的数据模板是 x:Object 之一,这就是显示的内容。

      Object 类不包含任何有意义的数据,因此没有任何理由编写

      <x:Object></x:Object> 
      

      因为该类型没有内容。

      【讨论】:

        猜你喜欢
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 2013-06-12
        • 2016-10-04
        • 1970-01-01
        • 1970-01-01
        • 2012-03-13
        • 2015-01-07
        相关资源
        最近更新 更多