数据网格 Xamarin UWP 问题 - HRESULT E_FAIL 已从对 COM 组件的调用中返回

Posted

技术标签:

【中文标题】数据网格 Xamarin UWP 问题 - HRESULT E_FAIL 已从对 COM 组件的调用中返回【英文标题】:Data grid Xamarin UWP issue - HRESULT E_FAIL has been returned from a call to a COM component 【发布时间】:2017-11-15 12:29:42 【问题描述】:

我正在使用 Xamarin.Forms.DataGrid 数据网格 nuget 包。当我在 android 手机上运行该应用程序时,它会很好地显示网格和数据。但是,当我尝试在 UWP 上运行完全相同的代码时,它会给我以下异常。

错误信息:

消息“System.Runtime.InteropServices.COMException:对 COM 组件的调用已返回错误 HRESULT E_FAIL。\r\n 在 Windows.UI.Xaml.UIElement.Measure(Size availableSize)\r\n 在Xamarin.Forms.Platform.UWP.VisualElementRenderer2.MeasureOverride(Size availableSize)\r\n at Windows.UI.Xaml.UIElement.Measure(Size availableSize)\r\n at Xamarin.Forms.Platform.UWP.VisualElementRenderer2.MeasureOverride(Size availableSize)\r\n at Windows.UI.Xaml.UIElement.Measure(Size availableSize)\r\n at Xamarin.Forms.Plat" 字符串。

如果我注释掉,它会在 UWP 中显示空网格和列

dgReceipts.ItemsSource = tempList;

所以我认为这不是 XAML 问题。

用于测试的设备是三星 Galaxy S6 android 7.0 和 Lumia 640

感谢任何帮助

XAML 代码

<dg:DataGrid x:Name="dgReceipts" RowHeight="70" HeaderHeight="50" BorderColor="#CCCCCC" HeaderBackground="#E0E6F8">
    <dg:DataGrid.Columns>
        <dg:DataGridColumn Title="ID" Width="1*">
            <dg:DataGridColumn.CellTemplate>
                <DataTemplate>
                    <ContentView>
                       <Label Text="Binding Apar_ID" VerticalOptions="Center" 
                       HorizontalOptions="Center"/>
                    </ContentView>
                </DataTemplate>                                
            </dg:DataGridColumn.CellTemplate>

    </dg:DataGridColumn>
    </dg:DataGrid.Columns>
        <dg:DataGrid.RowsBackgroundColorPalette>
            <dg:PaletteCollection>
                <Color>#F2F2F2</Color>
                <Color>#FFFFFF</Color>
            </dg:PaletteCollection>

        </dg:DataGrid.RowsBackgroundColorPalette>
</dg:DataGrid>

这是我获取数据列表的地方

//Gets transactions for reports page
public async Task<List<x_Transactions>> GetReportTransactions()

    List<x_Transactions> transactions = await database.Table<x_Transactions>
    ().ToListAsync();
    return transactions;

以及它设置为 dg itemssource 的位置

public async Task FillGrid()

    List<x_Transactions> tempList;
    newList = await App.Database.GetReportTransactions();
    dgReceipts.ItemsSource = tempList;     

【问题讨论】:

我已将DataGrid 的项目来源设置为dgReceipts.ItemsSource = new List&lt;Item&gt;(),效果很好。你试过打印tempList吗? 我可以看到在调试模式下返回了正确的数据量,而且它在 Android 中也显示了正确的数据。 请尝试清理解决方案并卸载应用程序,重新构建项目。 当我尝试在 UWP 上打开页面时仍然给出相同的异常。我会继续尝试修复它,如果我不这样做,我稍后会在此处发布更多代码。 如您所说,这不是 xaml 问题。您是否尝试过更新您的 xamarin.forms 版本? 【参考方案1】:

您不能在Xamarin.UWP 平台中使用嵌套滚动。 DataGrid 组件在内部使用 ListView。它不能有ScrollView 父级。

【讨论】:

哇。这真的真的真的很臭。您是否知道 github 中的这张票或任何解决此问题的方法?在 ios 中可以正常工作,而 Android 在这里不起作用。在很多情况下,您希望拥有一个完全展开的列表视图,以及滚动的下方的内容。

以上是关于数据网格 Xamarin UWP 问题 - HRESULT E_FAIL 已从对 COM 组件的调用中返回的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 中 ListView 的不同视图形式 Android 和 UWP

Xamarin form-UWP - 在快速滚动列表时显示数据之前的黑色单元格

UWP:数据网格 + ProgressRing

无法在 UWP 中设置 SQLite 对象 - Xamarin Forms

由于 Xamarin UWP 项目中的 Xamarin.CarouselView,UWP 应用程序崩溃

如何更改 Xamarin UWP 应用名称