UWP 树视图崩溃

Posted

技术标签:

【中文标题】UWP 树视图崩溃【英文标题】:UWP TreeView crash 【发布时间】:2020-01-22 06:51:19 【问题描述】:

我有一个TreeView(我几乎从 XAML 控件库中复制了相同的代码):

    <TreeView
        x:Name="LocalFolderTreeView"
        ItemTemplateSelector="StaticResource FolderTreeTemplateSelector"
        ItemsSource="x:Bind Tree, Mode=OneWay"
        Visibility="Collapsed" />

还有ItemTemplateSelector的XAML:

    <DataTemplate x:Key="FolderTemplate" x:DataType="data:FolderTree">
        <TreeViewItem
            DoubleTapped="FolderTreeItem_DoubleTapped"
            IsDoubleTapEnabled="True"
            IsExpanded="False"
            ItemsSource="x:Bind Files">
            <StackPanel Orientation="Horizontal">
                <StackPanel.ContextFlyout>
                    <MenuFlyout Opening="OpenPlaylistFlyout" />
                </StackPanel.ContextFlyout>
                <SymbolIcon Symbol="Folder" />
                <TextBlock Margin="0,0,10,0" />
                <TextBlock Text="x:Bind Path" />
            </StackPanel>
        </TreeViewItem>
    </DataTemplate>

    <DataTemplate x:Key="FileTemplate" x:DataType="data:Music">
        <TreeViewItem>
            <StackPanel
                DoubleTapped="FileItem_DoubleTapped"
                IsDoubleTapEnabled="True"
                Orientation="Horizontal">
                <StackPanel.ContextFlyout>
                    <MenuFlyout Opening="OpenMusicFlyout" />
                </StackPanel.ContextFlyout>
                <Image Width="20" Source="Assets/colorful_no_bg.png" />
                <TextBlock Margin="0,0,10,0" />
                <TextBlock Text="x:Bind Name" />
            </StackPanel>
        </TreeViewItem>
    </DataTemplate>

    <templateselector:FolderTreeTemplateSelector
        x:Key="FolderTreeTemplateSelector"
        FileTemplate="StaticResource FileTemplate"
        FolderTemplate="StaticResource FolderTemplate" />

ItemTemplateSelector 的 C# 是

public class FolderTreeTemplateSelector : DataTemplateSelector

    public DataTemplate FolderTemplate  get; set; 
    public DataTemplate FileTemplate  get; set; 

    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
    
        if (item is Models.FolderTree) return FolderTemplate;
        if (item is Models.Music) return FileTemplate;
        return null;
    

使用here

我的 ViewModel 定义为 here。

当我将此添加到 TreeView 时,我的应用程序崩溃了。 Tree 不为空,因为我还定义了 GridView 让我看到它。

        ItemsSource="x:Bind Tree, Mode=OneWay"

怎么了?

【问题讨论】:

我检查了LocalFoldersPage,我找不到你为TreeView设置了itemsource。所以,我不确定数据结构是否与您的 xaml 匹配。 @NicoZhu-MSFT 我删除了它,因为它导致我的应用程序崩溃。您可以将其添加回来。 如何浏览 LocalFoldersPage ? @NicoZhu-MSFT 您需要一个包含音乐文件文件夹的文件夹。如果您有像folder1/folder2/music.mp3 这样的音乐文件,基本上将folder1 设置为您的根路径。 我检查了 FolderTree 它与实际的文件夹结构不匹配。 【参考方案1】:

默认ItemsSource为集合类型,但上述代码中Tree数据源为FolderTree,会导致参数错误,请根据实际数据结构修改为集合。

【讨论】:

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

在Windows 10应用程序中实现树视图

如何在 uwp 中关闭辅助视图

在树视图中拖放

UWP 多个视图未关闭

UWP 独立滚动视图

UWP 或 XAML 导航视图突出显示 [关闭]