【问题标题】:How to use Uno Platform with Windows Community Toolkit如何将 Uno 平台与 Windows 社区工具包一起使用
【发布时间】:2022-01-18 03:31:29
【问题描述】:

我尝试使用this Uno Platform 模板制作演示应用程序。
我想要做的就是用this example 添加winui2 并用this example 添加Windows 社区工具包。

在做Windows Community Toolkit教程中提到的事情时,就是安装如下Nuget包:

  • Uno.Microsoft.Toolkit.Uwp.UI.Controls.DataGrid
    • 适用于 iOS、Android、Web (WebAssembly)
  • Microsoft.Toolkit.Uwp.UI.Controls.DataGrid
    • 对于 UWP 应用

并在我的 XAML 中使用以下参考:
xmlns:controls="using:Microsoft.Toolkit.Uwp.UI.Controls"

在 XAML 文件中,我添加了教程提供的以下代码片段:

<controls:DataGrid x:Name="dataGrid">
    <controls:DataGrid.Columns>
        <controls:DataGridTextColumn Header="Rank"/>
        <controls:DataGridComboBoxColumn Header="Mountain"/>
    </controls:DataGrid.Columns>
</controls:DataGrid>

将我带到我的 Shell.xaml 中的以下 XAML 文件:

<ContentControl
    x:Class="AndroidTest.Views.Shell"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:AndroidTest"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:prismMvvm="using:Prism.Mvvm"
    xmlns:prismRegions="using:Prism.Regions"

    xmlns:winui="using:Microsoft.UI.Xaml.Controls"
    xmlns:controls="using:Microsoft.Toolkit.Uwp.UI.Controls"

    prismMvvm:ViewModelLocator.AutowireViewModel="True"
    mc:Ignorable="d">


    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <StackPanel Grid.Row="0" Margin="20">
            <TextBlock Text="{Binding Title}" FontSize="30" />
            <TextBlock Text="Welcome to Uno/WinUI and Prism!" FontSize="15" />

            <!-- winui -->
            <winui:NumberBox />
            <!-- community toolkit -->
            <controls:DataGrid x:Name="dataGrid">
                <controls:DataGrid.Columns>
                    <controls:DataGridTextColumn Header="Rank"/>
                    <controls:DataGridComboBoxColumn Header="Mountain"/>
                </controls:DataGrid.Columns>
            </controls:DataGrid>

        </StackPanel>
        <ContentControl Grid.Row="1" prismRegions:RegionManager.RegionName="ContentRegion" />
    </Grid>
</ContentControl>

现在代码在 UWP 上运行良好,但不再适用于 Android。我在App.xaml.cs 收到此错误消息:

Prism.Ioc.ContainerResolutionException: 'An unexpected error occurred while resolving 'AndroidTest.Views.Shell''

函数处:

protected override UIElement CreateShell()
{
    return Container.Resolve<Shell>();
}

还有以下输出:

Loaded assembly: /data/user/0/AndroidTest.AndroidTest/files/.__override__/System.ComponentModel.DataAnnotations.dll [External]
[0:] The Bindable attribute is missing and the type [Windows.UI.Xaml.Controls.TextBlock] is not known by the MetadataProvider. Reflection was used instead of the binding engine and generated static metadata. Add the Bindable attribute to prevent this message and performance issues.
[0:] The Bindable attribute is missing and the type [Windows.UI.Xaml.Controls.TextBox] is not known by the MetadataProvider. Reflection was used instead of the binding engine and generated static metadata. Add the Bindable attribute to prevent this message and performance issues.
[0:] The Bindable attribute is missing and the type [Windows.UI.Xaml.Controls.Control] is not known by the MetadataProvider. Reflection was used instead of the binding engine and generated static metadata. Add the Bindable attribute to prevent this message and performance issues.
[0:] The Bindable attribute is missing and the type [Windows.UI.Xaml.FrameworkElement] is not known by the MetadataProvider. Reflection was used instead of the binding engine and generated static metadata. Add the Bindable attribute to prevent this message and performance issues.
[0:] The Bindable attribute is missing and the type [Windows.UI.Xaml.Controls.Border] is not known by the MetadataProvider. Reflection was used instead of the binding engine and generated static metadata. Add the Bindable attribute to prevent this message and performance issues.
[0:] The Bindable attribute is missing and the type [Windows.UI.Xaml.Controls.ScrollViewer] is not known by the MetadataProvider. Reflection was used instead of the binding engine and generated static metadata. Add the Bindable attribute to prevent this message and performance issues.
[est.AndroidTes] Accessing hidden method Landroid/view/View;->initializeScrollbars(Landroid/content/res/TypedArray;)V (greylist, JNI, allowed)
[0:] The Bindable attribute is missing and the type [Windows.UI.Xaml.Controls.Grid] is not known by the MetadataProvider. Reflection was used instead of the binding engine and generated static metadata. Add the Bindable attribute to prevent this message and performance issues.
[0:] The Bindable attribute is missing and the type [Windows.UI.Xaml.Controls.Button] is not known by the MetadataProvider. Reflection was used instead of the binding engine and generated static metadata. Add the Bindable attribute to prevent this message and performance issues.
[est.AndroidTes] Explicit concurrent copying GC freed 90(37KB) AllocSpace objects, 0(0B) LOS objects, 24% free, 2487KB/3316KB, paused 289us total 3.144ms
[0:] The Bindable attribute is missing and the type [Windows.UI.Xaml.Controls.ContentPresenter] is not known by the MetadataProvider. Reflection was used instead of the binding engine and generated static metadata. Add the Bindable attribute to prevent this message and performance issues.
[0:] The Bindable attribute is missing and the type [Windows.UI.Xaml.Controls.Primitives.RepeatButton] is not known by the MetadataProvider. Reflection was used instead of the binding engine and generated static metadata. Add the Bindable attribute to prevent this message and performance issues.
[0:] The Bindable attribute is missing and the type [Microsoft.UI.Xaml.Controls.NumberBox] is not known by the MetadataProvider. Reflection was used instead of the binding engine and generated static metadata. Add the Bindable attribute to prevent this message and performance issues.
[monodroid-assembly] open_from_bundles: failed to load assembly en-US/Microsoft.Toolkit.Uwp.UI.Controls.DataGrid.resources.dll
[monodroid-assembly] open_from_bundles: failed to load assembly en/Microsoft.Toolkit.Uwp.UI.Controls.DataGrid.resources.dll
**Prism.Ioc.ContainerResolutionException:** 'An unexpected error occurred while resolving 'AndroidTest.Views.Shell''

关于我缺少什么的任何想法?

【问题讨论】:

    标签: c# android uno-platform windows-community-toolkit


    【解决方案1】:

    您的问题很可能是链接器问题。你可以看看documentation from Microsoft

    【讨论】:

    • 感谢您的帮助!我通过查看我的 NuGet 包的所有依赖项找到了我的问题的解决方案,并发现我使用的是不兼容的版本。调整所有 NuGet 包的版本后,它工作正常。
    【解决方案2】:

    原来是不同版本的 NuGet 包存在问题,以及它们的依赖关系存在问题。
    对于具有 Uno 平台、Prism 库和 Windows 社区工具包的功能应用,您需要以下版本:

    安装这些 NuGet 包版本时,所有依赖项都是正确的,并且工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 2011-02-20
      • 2016-12-15
      • 2020-08-14
      相关资源
      最近更新 更多