WPF 显示文件列表中使用 ListBox 变到ListView 最后使用DataGrid

      WPF 显示文件列表中使用 ListBox 变到ListView 最后使用DataGrid

故事背景:

  需要检索某目录下文件,并列出来,提供选择和其他功能。

第一版需求:

  列出文件供选择即可,代码如下:

<ListBox Name="multiSelectFileLst" ItemsSource="{Binding FileList}" Grid.Row="1" Grid.Column="1" >
                    <ListBox.ItemTemplate >
                        <DataTemplate >
                            <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                                <Border Margin="5,1,5,1" Padding="3" BorderBrush="Green"  BorderThickness="1" CornerRadius="2">
                                    <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="300" ></ColumnDefinition>
                                            <ColumnDefinition Width="Auto" ></ColumnDefinition>
                                            <ColumnDefinition Width="80" ></ColumnDefinition>
                                        </Grid.ColumnDefinitions>

                                        <CheckBox Content="{Binding FileName}" ToolTip="{Binding FileName}" IsChecked="{Binding IsSelected}"/>
                                        <Button Content="查看" Width="75" HorizontalAlignment="Left" Grid.Column="2"
                                                Command="{Binding DataContext.OpenFileCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListBox}}" CommandParameter="{Binding ExcelFilePath}"  />

                                    </Grid>
                                </Border>
                            </Grid>

                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

可取之处:

  使用Border 画的边框还不错。

第二版需求:

  需要添加文件的目录一项,因此要添加列标题,该用ListView实现,改动较小:

  

<ListView Name="multiSelectFileLst" ItemsSource="{Binding FileList}" Grid.Row="1" Grid.Column="1" >
                        <ListView.View>
                            <GridView >
                                <GridViewColumn Header="文件名">
                                    <GridViewColumn.CellTemplate>
                                        <DataTemplate>
                                            <CheckBox Content="{Binding FileName}" ToolTip="{Binding FileName}" IsChecked="{Binding IsSelected}"/>
                                        </DataTemplate>
                                    </GridViewColumn.CellTemplate>
                                </GridViewColumn>
                                <GridViewColumn Header="文件目录">
                                    <GridViewColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock Text="{Binding FolderPath}" ToolTip="{Binding FolderPath}" Foreground="Black" />
                                        </DataTemplate>
                                    </GridViewColumn.CellTemplate>
                                </GridViewColumn>
                                <GridViewColumn Header="查看文件">
                                    <GridViewColumn.CellTemplate>
                                        <DataTemplate>
                                            <Button Content="查看" Width="75" HorizontalAlignment="Left"
                                                    Command="{Binding DataContext.OpenFileCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListBox}}" CommandParameter="{Binding ExcelFilePath}"  />
                                        </DataTemplate>
                                    </GridViewColumn.CellTemplate>
                                </GridViewColumn>
                            </GridView>
                        </ListView.View>
                    </ListView>

最后,个人觉得默认样式不好看,改为使用actiprosoftware的ThemedDataGrid:

  

<datagrid:ThemedDataGrid Name="multiSelectFileLst" ItemsSource="{Binding FileList}" Grid.Row="1" Grid.Column="1"
                                             AutoGenerateColumns="False" CanUserAddRows="False" CanUserResizeRows="False" CanUserDeleteRows="False"
                                             AreRowDetailsFrozen="False" CanUserSortColumns="False" CanUserReorderColumns="False"
                                             HeadersVisibility="Column" SelectionUnit="FullRow"
                                             >

                        <datagrid:ThemedDataGrid.Columns>
                            <DataGridTemplateColumn Header="文件名" IsReadOnly="True" Width="auto">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <CheckBox Content="{Binding FileName}" ToolTip="{Binding FileName}" IsChecked="{Binding IsSelected}" Margin="0,0,20,0" />
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn >
                            <DataGridTemplateColumn Header="文件目录" IsReadOnly="True" Width="auto" >
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding FolderPath}" ToolTip="{Binding FolderPath}" Margin="20,0,20,0" />
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn >
                            <DataGridTemplateColumn Header="查看文件" IsReadOnly="True" Width="80" >
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <Button Content="查看" HorizontalAlignment="Left" Width="75"
                                                Command="{Binding DataContext.OpenFileCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListBox}}"
                                                CommandParameter="{Binding ExcelFilePath}"  />
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn >
                        </datagrid:ThemedDataGrid.Columns>
                    </datagrid:ThemedDataGrid>

其中存在疑问:ListBox中的模板长度设置,没有随界面缩放,后续解决了补上。

  

时间: 2024-08-25 03:20:09

WPF 显示文件列表中使用 ListBox 变到ListView 最后使用DataGrid的相关文章

在滚动列表中实现视频的播放(ListView &amp; RecyclerView)

英文原文:Implementing video playback in a scrolled list (ListView & RecyclerView) 本文将讲解如何在列表中实现视频播放.类似于诸如 Facebook, Instagram 或者 Magisto这些热门应用的效果: Facebook: Magisto: Instagram: 这片文章基于开源项目: VideoPlayerManager. 所有的代码和示例都在那里.本文将跳过许多东西.因此如果你要真正理解它是如何工作的,最好下载

Android在滚动列表中实现视频的播放 ListView RecyclerView

英文原文:Implementing video playback in a scrolled list (ListView & RecyclerView) 本文将讲解如何在列表中实现视频播放.类似于诸如 Facebook, Instagram 或者 Magisto这些热门应用的效果: Facebook: Magisto: Instagram: 这片文章基于开源项目: VideoPlayerManager. 所有的代码和示例都在那里.本文将跳过许多东西.因此如果你要真正理解它是如何工作的,最好下载

列表控件ListBox关联的MFC中的类:CListBox

######################################################## 1.在列表的结尾添加一项:AddString 2.在列表的指定位置添加一项:InsertString 3.获取列表中项的个数:GetCount 4.获取某项的文本:GetText 5.在单选列表控件中,获取与设置当前选中项:GetCurSel.SetCurSel 6.在列表项中查找指定的字符串:FindString.FindStringExact 7.删除列表中所有的项:ResetC

年度巨献-WPF项目开发过程中WPF小知识点汇总(原创+摘抄)

WPF中Style的使用 Styel在英文中解释为”样式“,在Web开发中,css为层叠样式表,自从.net3.0推出WPF以来,WPF也有样式一说,通过设置样式,使其WPF控件外观更加美化同时减少了大量的复杂属性的设置. 在WPF中,设置外观样式我们有很多种方式,比如通过设置控件的属性来控制控件的外观样式:或者通过在每一个控件中分别设置Style:或者通过在整个Window.Resource中设置Style,又或者在App.xaml的Application.Resource设置Style. 在

JSON-JSON字符串转换成JSON对象、JSON对象数组、java实体类以及保存到List列表中

处理JSON字符串时,一直出错,写个样例后发现原来是没有弄清楚数据的格式问题. 实现的是 JSONString 转换成java对象 或是 list列表 实例类 News package lyx.entity; /** * @author lyx * * 2015-8-10上午10:14:38 * * *新闻类 */ public class News { /** * 日期 */ private String date; /** * 链接 */ private String link; /** *

在文件列表中选择文件,并把一个文件的内容显示在TextArea中

private FileDialog openFileDialog = new FileDialog(this,"Open File",FileDialog.LOAD); else if(eventSource == openFile) { openFileDialog.show(); fileName = openFileDialog.getDirectory()+openFileDialog.getFile(); if(fileName != null) readFile(file

OOP中的逆变和协变

逆变和协变在存在于强类型语言中,尽管非常少提及,可是里面蕴含了面向对象的世界观.感谢和我一起讨论这个问题的人. 这里用了C#.Scala的语法作为演示样例,事实上逆变和协变的概念跟语言本身关系不大,事实也是如此. 一.定义 逆变的參数能够由指定的类型的子类型取代,协变的參数能够由指定类型的父类型取代. Scala中的逆变声明:Function[-A,+B] ;当中泛型-A为逆变类型.在实例化时,能够使用A类型或者A类的子类型. 二.协变与逆变的用途不同 1.语义 Scala中,函数的原型之中的一

TTS-零基础入门之停止列表中单条语音播报

做了一个语音 循环播报列表信息.当我新删除了一天列表之后,发现它只有在下一轮播报中才会取消.这明显是不合理的. 一开始的代码是这样写的. <span style="font-family:KaiTi_GB2312;font-size:18px;"> /// <summary> /// 语音循环播报方法 /// </summary> private static void AlarmSpeek() { try { timer.Stop(); nowAl

Java中的逆变和协变

// public final class Integer extends Number Number num = new Integer(1); List<Number> list = new ArrayList<>(); list.add(new Integer(3)); ArrayList<Number> list = new ArrayList<Integer>(); //type mismatch List<? extends Number&