【问题标题】:WinRTXAMLToolkit Treeview Crash on Windows 10Windows 10 上的 WinRTXAMLToolkit 树视图崩溃
【发布时间】: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)

内部异常为空

【问题讨论】:

    标签: windows-runtime windows-store-apps winrt-xaml windows-10 winrt-xaml-toolkit


    【解决方案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
    • 在他们修复它之前,如果您发现它工作正常,请将其标记为答案。 (至少,我是这样解决的,而且效果很好)。
    猜你喜欢
    • 2019-03-01
    • 2022-06-12
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多