WinRTXAMLToolkit Treeview 在 Windows 10 上崩溃

WinRTXAMLToolkit Treeview Crash on Windows 10

我最近将 OS 从 Windows 8.1 升级到 Windows 10。我正在使用带有更新 4 的 VS 2013。 我的应用程序使用 XAMLToolkit 的 Treeview 控件,它在 Windows 8.1 环境中完美运行。但是在 Windows 10 下,它给了我以下错误。 请帮忙。

这是我使用过的 XAMLToolkit 版本: nuget.org/packages/winrtxamltoolkit.windows

异常消息:

System.Runtime.InteropServices.COMException: Error HRESULT E_FAIL has been returned from a call to a COM component. at Windows.UI.Xaml.Controls.ItemsControl.get_ItemTemplate() at WinRTXamlToolkit.Controls.HeaderedItemsControl.PrepareHeaderedItemsControlContainer(HeaderedItemsControl control, Object item, ItemsControl parentItemsControl, Style parentItemContainerStyle) at WinRTXamlToolkit.Controls.HeaderedItemsControl.PrepareHeaderedItemsControlContainerForItemOverride(DependencyObject element, O

堆栈跟踪:

at Windows.UI.Xaml.Controls.ItemsControl.get_ItemTemplate() at WinRTXamlToolkit.Controls.HeaderedItemsControl.PrepareHeaderedItemsControlContainer(HeaderedItemsControl control, Object item, ItemsControl parentItemsControl, Style parentItemContainerStyle) at WinRTXamlToolkit.Controls.HeaderedItemsControl.PrepareHeaderedItemsControlContainerForItemOverride(DependencyObject element, Object item, ItemsControl parent, Style parentItemContainerStyle) at WinRTXamlToolkit.Controls.TreeView.PrepareContainerForItemOverride(DependencyObject element, Object item) at Windows.UI.Xaml.FrameworkElement.MeasureOverride(Size availableSize)

内部异常为空

您似乎在 TreeView 的 XAML 代码中使用了 HierarchicalDataTemplate。将 XAML 替换为相应的 C# 代码会有所帮助。我们可以在 Loaded 事件的代码隐藏中为 TreeView 设置附加的 DataTemplateExtensions.Hierarchy 属性,像这样:

<controls:TreeView x:Name="treeView"
                   Loaded="treeView_Loaded"
...

在代码隐藏中:

private void treeView_Loaded(object sender, RoutedEventArgs e)
        {
            //don't know why, but in Windows 10 if this code is as XAML, the app falls with a ComExcpetion
            //so the corresponding XAML should be commented out like this:
            //...
            //<controls:TreeView.ItemTemplate>
            //  <DataTemplate>
            //   <!-- <data:DataTemplateExtensions.Hierarchy>
            //    <data:HierarchicalDataTemplate ItemsSource="{Binding Folders}" />
            //   </data:DataTemplateExtensions.Hierarchy> -->
            //  <Grid>
            //...
            WinRTXamlToolkit.Controls.Data.DataTemplateExtensions.SetHierarchy(treeView.ItemTemplate, new WinRTXamlToolkit.Controls.Data.HierarchicalDataTemplate
                {
                    ItemsSource = new Windows.UI.Xaml.Data.Binding { Path = new PropertyPath("Folders") }
                });
        }

我遇到了同样的问题,我只是删除了 treeview 控件中的 itemtemplate 并单独添加到页面资源中,我将 itemtemplate 引用到我的 treeview 控件中。它解决了我的问题。

<Page.Resources>

<DataTemplate x:Name="TreeViewItemTemplate">
<Grid>
<TextBlock Text="{Binding Name}" />
</Grid>

<XCDATA:DataTemplateExtensions.Hierarchy>
<XCDATA:HierarchicalDataTemplate ItemsSource="{Binding Items}" />
</XCDATA:DataTemplateExtensions.Hierarchy>

</DataTemplate>

</Page.Resources>

<XC:TreeView 
    ItemTemplate="{StaticResource TreeViewItemTemplate}"
    ItemsSource="{Binding ObjShopItems}">      
</XC:TreeView>