无法在 xamarin 中访问 Telerik 的 RadTimePicker 对象的 "Time" 属性。 Nullable<> 类型在未引用的程序集中定义

Cant access "Time" property of RadTimePicker object of Telerik in xamarin. The type Nullable<> is defined in an assembly that is not referenced

我见过很多 post 与我面临的问题类似,但他们的解决方案未能解决我的问题。我可以用一些新鲜的眼光来看待这个。我目前无法从 Telerik 访问与我的 TimePicker 对象的时间相关的任何属性。我在尝试访问 RadTimePicker.Time 时收到的错误消息是“可空类型 <> 在未引用的程序集中定义”。当我尝试访问 RadTimePicker.MaximumTime 时,是“TimeSpan 类型在未引用的程序集中定义。您必须添加对程序集 'netstandard,Version=2.0.0.0,Cultural=neutral,...”的引用。但是,我可以在代码的其他任何地方创建一个新的 TimeSpan 对象。

我已经按照智能建议添加了对 .netstandard 版本的引用。我已经更新了 .netstandard 以匹配我的两个项目。当前 2.0.3。也一度将其降低到 2.0.0。我已经卸载 xamarin.forms 和所有相关的 xamarin 表单 nuget 包并重新安装它们。对 Telerik 控件也是如此。

我发现的一个差异是 xamarin.controls 仅安装在我的 ios 项目中,当我尝试在我的共享项目中安装时,我得到“NU1202:包 Xamarin.Controls 1.0. 3 不兼容netstandard1.3 (.NETStandard,Version=v1.3). Package Xamarin.Controls 1.0.3 supports: portable-net45+win8+wp8 (.NETPortable,Version=v0.0,Profile=Profile78 )" 但是我不得不将框架从 PCL 更改为 .NetStandard 以在项目中安装 Telerik,这也让我感到困惑。

谢谢,我将在下面 post 一些代码,但我认为这两种方式都不会非常有用。

txtMobTime.Unfocused += (object sender, FocusEventArgs e) =>
            {
                if (string.IsNullOrEmpty(txtMobTime.Time))
                {
                    _ticket.TicketMobilityTime = null;
                    NLTickets.Update(_ticket);
                }
                else
                {
                    
                    try
                    {
                        _ticket.TicketMobilityTime = txtMobTime.Time;
                        NLTickets.Update(_ticket);
                    }
                    catch (Exception ex)
                    {
                        DisplayAlert("Invalid Entry", "Please enter a valid time for this value.", "OK");
                    }
                    NLTickets.Update(_ticket);
                }
            };

使用下面的示例 csproj 交叉检查 class 库的项目 PackageReferences(假设您使用的是截至我回复之日的最新版本):

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <ProduceReferenceAssembly>true</ProduceReferenceAssembly>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <DebugType>portable</DebugType>
    <DebugSymbols>true</DebugSymbols>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Telerik.UI.for.Xamarin" Version="2020.2.624.1" />
    <PackageReference Include="Xamarin.Forms" Version="4.7.0.968" />
    ...
  </ItemGroup>

...
</Project>

要点:

  • Xamarin 的 Telerik UI 需要最低版本 Xamarin.Forms 4.1.
  • TFM(目标框架名称)是 netstandard2.0

我有点怀疑过时的 Xamarin.Controls 软件包。虽然如果它只需要 .NET 标准 1.6,它在技术上应该可以工作,但它可能依赖于旧版本的 Xamarin(v2.5.1 或更早版本)。