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 中有类似这样的内容时:<controls:TreeView.ItemTemplate> <DataTemplate> <!-- <data:DataTemplateExtensions.Hierarchy> <data:HierarchicalDataTemplate ItemsSource="Binding Folders" /> </data:DataTemplateExtensions.Hierarchy> --> <Grid> ....
您可以在此处看到这一行: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 终端有啥区别