首页 > 其他分享 >WPF 由TreeView想到的 DataTemplate,HierarchicalDataTemplate

WPF 由TreeView想到的 DataTemplate,HierarchicalDataTemplate

时间:2023-08-13 21:22:41浏览次数:36  
标签:HierarchicalDataTemplate 代码 前台 WPF TreeView DataTemplate

DataTemplate简而言之,解决的就是后台代码中的类以怎么样的形式展现在xaml前台代码中的问题。
所以DataTemplate一般都要指定DataType,一般放在resource中,而HierarchicalDataTemplate是一种特殊的DataTemplate,
它指定一个ItemsSource,当自身属性是列表时,有次序的在前台展示下去。
以下是一个简单的Demo

<Window x:Class="EB_Func_DB.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:EB_Func_DB"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <HierarchicalDataTemplate DataType="{x:Type local:Module}" 
                                  ItemsSource="{Binding SubModules}">
            <TextBlock Text="{Binding Path=Name}">
                <TextBlock.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="添加子模块" Click="MenuItem_Click_2"  CommandParameter="{Binding}"/>
                        <MenuItem Header="删除模块" Click="MenuItem_Click_1" CommandParameter="{Binding}"/>
                    </ContextMenu>
                </TextBlock.ContextMenu>
            </TextBlock>
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate DataType="{x:Type local:SubModule}"
                                  ItemsSource="{Binding PlugInFuncs}">
            <TextBlock Text="{Binding Path=Name}">
                <TextBlock.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="添加功能" Click="MenuItem_Click_4" CommandParameter="{Binding}" />
                        <MenuItem Header="删除子模块" Click="MenuItem_Click_3" CommandParameter="{Binding}" />
                    </ContextMenu>
                </TextBlock.ContextMenu>
            </TextBlock>
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate DataType="{x:Type local:PlugInFunc}">
            <TextBlock Text="{Binding Path=FuncName}">
                <TextBlock.ContextMenu>
                    <ContextMenu >
                        <MenuItem Header="添加功能" Click="MenuItem_Click_4" CommandParameter="{Binding}"/>
                        <MenuItem Header="删除功能" Click="MenuItem_Click_5" CommandParameter="{Binding}"/>
                    </ContextMenu>
                </TextBlock.ContextMenu>
            </TextBlock>
        </HierarchicalDataTemplate>
        
    </Window.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition Height="30"/>
        </Grid.RowDefinitions>
        <Grid Grid.Row="0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="80"/>
                <ColumnDefinition Width="100"/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="0" Text="专业:" VerticalAlignment="Center" HorizontalAlignment="Center"/>
            <ComboBox x:Name="majorComBox" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center" Width="95" Margin="2"/>
        </Grid>
        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="80"/>
                <ColumnDefinition Width="200"/>
                <ColumnDefinition Width="35"/>
                <ColumnDefinition Width="45"/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="0" Text="插件路径:" VerticalAlignment="Center" HorizontalAlignment="Center"/>
            <TextBlock Grid.Column="1" x:Name="pathTextBox" VerticalAlignment="Center" HorizontalAlignment="Center" Text="unselected" Foreground="Gray" Width="195" Margin="2"/>
            <Button Grid.Column="2" x:Name="pathBtn" VerticalAlignment="Center" HorizontalAlignment="Center" Content="···" Click="pathBtn_Click" Width="30" Margin="2"/>
        </Grid>
        <DataGrid Grid.Row="2" x:Name="funcDataGrid" AutoGenerateColumns="False" CanUserAddRows="False" 
                  CanUserDeleteRows="False" CanUserSortColumns="False" RowHeaderWidth="0"
                  MouseDoubleClick="funcDataGrid_MouseDoubleClick"
                  >
            <DataGrid.ColumnHeaderStyle>
                <Style TargetType="DataGridColumnHeader">
                    <Setter Property="HorizontalContentAlignment" Value="Center"></Setter>
                    <Setter Property="VerticalContentAlignment" Value="Center"></Setter>
                </Style>
            </DataGrid.ColumnHeaderStyle>
            <DataGrid.Columns>
                <DataGridCheckBoxColumn Header="是否加入数据库" Binding="{Binding Checked}">

                </DataGridCheckBoxColumn>
                <DataGridTextColumn Header="名称" Binding="{Binding Path=Name}" IsReadOnly="True">

                </DataGridTextColumn>
                <DataGridTextColumn Header="描述" Binding="{Binding  Path=Describe}" IsReadOnly="True">

                </DataGridTextColumn>
                <DataGridTextColumn Header="是否在数据库" Binding="{Binding Path=Info}" IsReadOnly="True">

                </DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
        <TreeView Grid.Row="3" x:Name="treeView" 
                  >
            <TreeView.ItemContainerStyle>
                <Style TargetType="TreeViewItem">
                    <Setter Property="IsExpanded" Value="True" />
                </Style>
            </TreeView.ItemContainerStyle>
            <TreeView.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="增加模块" Click="MenuItem_Click"/>
                </ContextMenu>
            </TreeView.ContextMenu>
        </TreeView>
        <Button Grid.Row="4" x:Name="ok" Content="确定" Click="ok_Click"/>
    </Grid>
</Window>


标签:HierarchicalDataTemplate,代码,前台,WPF,TreeView,DataTemplate
From: https://www.cnblogs.com/johnyang/p/17627299.html

相关文章

  • WPF 入门笔记 - 07 - MVVM示例
    滴咚,大家好久不见......
  • 用Wpf做一个Block编程画板(仿scratch)
    前言,当时想写这个东西(AIStudio.Wpf.Block)主要是陪我儿子学scratch,觉得这种编程语言挺有意思,但是没有想到自己写一个是如此的复杂,感觉给自己挖坑了,后续的工程也非常巨大,先发出一部分来看看,上几个动图。1.helloworld2.加法3.画线本次更新先发布这些内容,后续进展,敬请期待。......
  • WPF自定义控件实战:自制上传文件显示进度按钮
    自定义控件在WPF开发中是很常见的,有时候某些控件需要契合业务或者美化统一样式,这时候就需要对控件做出一些改造。 目录按钮设置圆角按钮上传文件相关定义测试代码 话不多说直接看效果默认效果:上传效果:按钮设置圆角因为按钮本身没有CornerRadius属性,所......
  • WPF 禁止输入法 IME
    WPF禁止输入法IME InputMethod.IsInputMethodEnabledhttps://learn.microsoft.com/zh-cn/dotnet/api/system.windows.uielement.isinputmethodenabled?view=netframework-4.8.1针对Listbox,如果也要禁止IME,需要禁止ListboxItem的IsInputMethodEnabled<StyleTarge......
  • C# WPF 将第三方DLL嵌入 exe
    没成功,只是做个记录,后面再研究希望将第三方的HandyControl.dll嵌入到exe中,这样不用发多个文件给别人将第三方DLL。加载到解决方案中添加引用将“属性页”中的“复制本地”项改为“False”右键点击最开始复制到项目目录中的dll文件,点击“属性”。将“属性”页中的“复制到输出......
  • 你们眼睛干涩,胀痛吗?C# WPF 久坐提醒桌面小程序 - 内附 眼肌运动、远视力表高清图
    目录说明设置提醒时间,及休息时间久坐提醒倒计时休息提醒倒计时休息到计时代码说明主窗体设置工作到计时休息倒计时源码高清图久坐提醒桌面小程序:干这行职业病比较多,之前用爱丽(即:玻璃酸钠滴眼液),用的时候挺舒服,缓解吧,不过治标不治本。注意休息,加强锻炼非常有必要,每工作1小时,休息10分......
  • 你们眼睛干涩,胀痛吗?C# WPF 久坐提醒桌面小程序 - 内附 眼肌运动、远视力表高清图
    目录说明设置提醒时间,及休息时间久坐提醒倒计时休息提醒倒计时休息到计时代码说明主窗体设置工作到计时休息倒计时源码高清图久坐提醒桌面小程序:干这行职业病比较多,之前用爱丽(即:玻璃酸钠滴眼液),用的时候挺舒服,缓解吧,不过治标不治本。注意休息,加强锻炼非常有必要,每工作1小时,休息10分......
  • 使用WPF构建响应式桌面应用程序
    当构建响应式桌面应用程序时,WPF(WindowsPresentationFoundation)是一个强大的工具,它允许你创建现代、交互式和具有吸引力的用户界面。在本博客中,我们将探讨如何使用WPF构建响应式桌面应用程序,并提供一些示例代码来帮助你入门。什么是WPF?WPF是一种用于创建Windows桌面应用程序的技术......
  • WPF的前世今生
    1、WPF的布局WPF的布局分为相对定位和绝对定位两种。绝对定位一般用Canvas相对定位一般用Grid、StackPanel、DockPanel、WrapPanel2、MVVM模式是什么MVVM就是ModelViewViewModelModel层就是数据层,你可以把它理解成实体层,一般情况下,只要不和服务端挂钩或者小型项目,写一个实......
  • WPF图形控件使用之-VisualBrush图形画刷
    VisualBrush 背景图 Background上画,线条(LineGeometry)、几何图形(RectangleGeometry)、椭圆(EllipseGeometry)、弧线(ArcSegment )、各种控件等,相对与DrawingBrush书写更简单一些。 属性说明备注Viewport(从左向右,从上向下,图像宽度放大比例,图像高度放大比例)放大背......