Windows 10 上的 WinRTXAMLToolkit 树视图崩溃

Posted

技术标签:

【中文标题】Windows 10 上的 WinRTXAMLToolkit 树视图崩溃【英文标题】:WinRTXAMLToolkit Treeview Crash on Windows 10 【发布时间】:2015-10-23 21:57:40 【问题描述】:

我最近将我的操作系统从 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:对 COM 组件的调用已返回错误 HRESULT E_FAIL。 在 Windows.UI.Xaml.Controls.ItemsControl.get_ItemTemplate() 在 WinRTXamlToolkit.Controls.HeaderedItemsControl.PrepareHeaderedItemsControlContainer(HeaderedItemsControl 控件,对象项,ItemsControl parentItemsControl,样式 parentItemContainerStyle) 在 WinRTXamlToolkit.Controls.HeaderedItemsControl.PrepareHeaderedItemsControlContainerForItemOverride(DependencyObject 元素,O

堆栈跟踪:

在 Windows.UI.Xaml.Controls.ItemsControl.get_ItemTemplate() 在 WinRTXamlToolkit.Controls.HeaderedItemsControl.PrepareHeaderedItemsControlContainer(HeaderedItemsControl 控件,对象项,ItemsControl parentItemsControl,样式 parentItemContainerStyle) 在 WinRTXamlToolkit.Controls.HeaderedItemsControl.PrepareHeaderedItemsControlContainerForItemOverride(DependencyObject 元素,对象项,ItemsControl 父项,样式 parentItemContainerStyle) 在 WinRTXamlToolkit.Controls.TreeView.PrepareContainerForItemOverride(DependencyObject 元素,对象项) 在 Windows.UI.Xaml.FrameworkElement.MeasureOverride(Size availableSize)

内部异常为空

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,我所做的只是删除了 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>

【讨论】:

谢谢你的信息,我会试试这个,让你知道发生了什么。 我知道这已经有一段时间了,但我今天试过了,它奏效了。非常感谢。【参考方案2】:

您似乎在 XAML 代码中为 TreeView 使用了 HierarchicalDataTemplate。用相应的 C# 代码替换 XAML 会有所帮助。我们可以在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") 
                );
        

【讨论】:

请解释一下“ItemsSource = new Windows.UI.Xaml.Data.Binding Path = new PropertyPath("Folders") ” 什么是“文件夹”?这是我需要提供的层次结构吗?我正在使用 MVVM 来绑定数据,还有其他方法吗? 我说的是HierarchicalDataTemplate。所以我的回答只有在你使用这个东西的情况下才对你有用。仅当您在 XAML 中有类似这样的内容时:&lt;controls:TreeView.ItemTemplate&gt; &lt;DataTemplate&gt; &lt;!-- &lt;data:DataTemplateExtensions.Hierarchy&gt; &lt;data:HierarchicalDataTemplate ItemsSource="Binding Folders" /&gt; &lt;/data:DataTemplateExtensions.Hierarchy&gt; --&gt; &lt;Grid&gt; .... 您可以在此处看到这一行:ItemsSource="Binding Folders" 所以“文件夹”是子项路径。孩子的名单。 嗨,是的,我确实在我的 XAML 上使用了 HierarchicalDataTemplate,XAMLToolkit 的供应商表示他们将致力于此并发布一个新版本。所以我想我会等他们回来。 winrtxamltoolkit.codeplex.com/discussions/642218 在他们修复它之前,如果您发现它工作正常,请将其标记为答案。 (至少,我是这样解决的,而且效果很好)。

以上是关于Windows 10 上的 WinRTXAMLToolkit 树视图崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Windows 10 上的容器连接到 docker 主机(Docker for Windows)

Windows 10 上的 XAMPP 和 Skype 端口冲突

Windows 10 上的 Bash 和 Ubuntu 终端有啥区别

在 Windows 10 上的 WSL2 上使用 JDK 的正确方法是啥?

异常退出:Windows 10 上的 eaccess

Windows 10 上的环境变量太大