windows runtime - WinRTXAMLToolkit Treeview Crash en la ventana 10
windows-runtime windows-store-apps (2)
Recientemente, actualicé mi sistema operativo a Windows 10 desde Windows 8.1. Estoy usando VS 2013 con la actualización 4. Mi aplicación utiliza el control treeview de XAMLToolkit y funciona perfectamente en el entorno Win 8.1. Pero en Windows 10 me da el siguiente error. Por favor ayuda.
Esta es la versión de XAMLToolkit que he usado: nuget.org/packages/winrtxamltoolkit.windows
Mensaje de excepción:
System.Runtime.InteropServices.COMException: Error HRESULT E_FAIL ha sido devuelto desde una llamada a un componente COM. en Windows.UI.Xaml.Controls.ItemsControl.get_ItemTemplate () en WinRTXamlToolkit.Controls.HeaderedItemsControl.PrepareHeaderedItemsControlContainer (control HeaderedItemsControl, elemento de objeto, ItemsControl parentItemsControl, Estilo parentItemContainerStyle) en WinRTXamlToolkit.Controls.HeaderedItemsControl.PrepareHeaderedItemsControlContainerForItemOverride (elemento de DependencyObject, O
Stacktrace:
en Windows.UI.Xaml.Controls.ItemsControl.get_ItemTemplate () en WinRTXamlToolkit.Controls.HeaderedItemsControl.PrepareHeaderedItemsControlContainer (control HeaderedItemsControl, elemento de objeto, ItemsControl parentItemsControl, Estilo parentItemContainerStyle) en WinRTXamlToolkit.Controls.HeaderedItemsControl.PrepareHeaderedItemsControlContainerForItemOverride (elemento de DependencyObject, elemento de objeto, ItemsControl parent, Style parentItemContainerStyle) en WinRTXamlToolkit.Controls.TreeView.PrepareContainerForItemOverride (Elemento DependencyObject, Elemento de objeto) en Windows.UI.Xaml.FrameworkElement.MeasureOverride (Size availableSize)
La excepción interna es nula
Parece que estás usando una HierarchicalDataTemplate
en tu código XAML para TreeView
. Reemplazar el XAML con el código C # correspondiente lo ayudará. Podemos establecer la propiedad adjunta DataTemplateExtensions.Hierarchy
en código subyacente en el evento Loaded
para TreeView
, así:
<controls:TreeView x:Name="treeView"
Loaded="treeView_Loaded"
...
Y en código subyacente:
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") }
});
}
Me encontré con el mismo problema, lo que hice fue eliminar la plantilla de elementos dentro del control de vista de árbol y agregarla por separado en el recurso de la página y referí la plantilla de elementos al control treeview. resolvió mi problema
<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>