ListView是UI库在大多数现代操作系统中提供的图形屏幕控件或窗口小部件,用于以列表形式显示项目。
如何从 AlertDialog 中的列表视图获取 onItemclick
我有一个带有三个相同按钮和三个相同文本视图的活动。每个按钮 onClick 都会通过以下代码调用 AlertDialog: PickerDialog = new PickerDialogFragment();
我在使用 ListView 时遇到问题。 ListView 太长,部分出现在窗口之外,但我无法附加滚动条。我尝试了很多不同的组合。我认为问题在于
假设我有以下ListView: 假设我有以下 ListView: <ListView ScrollViewer.VerticalScrollBarVisibility="Auto"> <ListView.View> <GridView> <GridViewColumn Header="Something" DisplayMemberBinding="{Binding Path=ShortText}" /> <GridViewColumn Header="Description" DisplayMemberBinding="{Binding Path=VeryLongTextWithCRs}" /> <GridViewColumn Header="Something Else" DisplayMemberBinding="{Binding Path=AnotherShortText}" /> </GridView> </ListView.View> </ListView> 我希望短文本列始终适合屏幕,长文本列使用剩余空间,必要时可自动换行。 这可能吗? 使用 GridListView 没有简单的方法来做到这一点,因为它不支持将列的宽度设置为“*”(填充剩余空间)。 这里讨论了如何通过使用 IValueConverter 将列的宽度设置为 TotalListWidth - SumOfColumnWidths 来伪造它 另一方面,您是否考虑过使用 DataGrid 来代替?这将支持您正在寻找的布局类型,尽管这是一个相当重的控件。它也仅在 .NET 4 中原生 - 尽管您可以通过 WPF Toolkit 获得 3.5 的等效版本。 <Grid Name="dummygrid" Visibility="Hidden"> <Grid.ColumnDefinitions> <ColumnDefinition Width="0.5*"></ColumnDefinition> <ColumnDefinition Width="0.2*"></ColumnDefinition> <ColumnDefinition Width="0.1*"></ColumnDefinition> <ColumnDefinition Width="0.2*"></ColumnDefinition> <ColumnDefinition Width="150"></ColumnDefinition> </Grid.ColumnDefinitions> <Border Grid.Column="0" Name="dummywidth1"></Border> <Border Grid.Column="1" Name="dummywidth2"></Border> <Border Grid.Column="2" Name="dummywidth3"></Border> <Border Grid.Column="3" Name="dummywidth4"></Border> <Border Grid.Column="5" Name="dummywidth5"></Border> </Grid> <ListView Name="Installer_LV" Grid.Row="1" ItemContainerStyle="{StaticResource LV_ItemStyle}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" AlternationCount="2"> <ListView.View> <GridView ColumnHeaderContainerStyle="{StaticResource LV_HeaderStyle}"> <GridViewColumn Width="{Binding ElementName=dummywidth1, Path=ActualWidth}" DisplayMemberBinding="{Binding DisplayName}" > <GridViewColumn.Header> <GridViewColumnHeader Tag="DisplayName" Click="InstallerLV_HeaderClick">Name</GridViewColumnHeader> </GridViewColumn.Header> </GridViewColumn> <GridViewColumn Width="{Binding ElementName=dummywidth2, Path=ActualWidth}" DisplayMemberBinding="{Binding Publisher}"> <GridViewColumn.Header> <GridViewColumnHeader Tag="Publisher" Click="InstallerLV_HeaderClick">Publisher</GridViewColumnHeader> </GridViewColumn.Header> </GridViewColumn> <GridViewColumn Width="{Binding ElementName=dummywidth3, Path=ActualWidth}" DisplayMemberBinding="{Binding Version}"> <GridViewColumn.Header> <GridViewColumnHeader Tag="Version" Click="InstallerLV_HeaderClick">Version</GridViewColumnHeader> </GridViewColumn.Header> </GridViewColumn> <GridViewColumn Width="{Binding ElementName=dummywidth4, Path=ActualWidth}" DisplayMemberBinding="{Binding Size}"> <GridViewColumn.Header> <GridViewColumnHeader Tag="Size" Click="InstallerLV_HeaderClick">Size</GridViewColumnHeader> </GridViewColumn.Header> </GridViewColumn> <GridViewColumn Header="Action" Width="150"> <GridViewColumn.CellTemplate> <DataTemplate> <Button Height="38" Width="130" Style="{DynamicResource RoundedButton}" Content="{Binding Status}" Tag="{Binding ModuleId}" HorizontalAlignment="Center" VerticalAlignment="Center" Click="onActionClick"></Button> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </ListView.View> </ListView> 在上面的示例中,我使用了虚拟网格并分成 5 列,并使用绑定将该大小分配给“GridViewColum” 宽度=“{绑定元素名称=虚拟宽度4,路径=实际宽度}” 这样,当隐藏的虚拟网格列大小发生变化时,它也会反映在 gridview 列大小中。 在 GridViewColumns 上设置 Width="Auto"。 但是,由于虚拟化,您可能会遇到一些自动调整大小的问题。 看到这个问题。 因此,长话短说,如果您想要准确地自动调整列大小,则需要在可见数据因虚拟化而发生变化时重新计算宽度。 这对我有用,对于没有明确设置宽度的任何列,将 Width 切换到 ActualWidth,然后返回 NaN。 仅当列表视图列不包含控件时,这才有效。 我通常在列表中的数据发生更改后调用此方法。 Public Shared Sub AutoResizeListView(lst As Windows.Controls.ListView) Dim gv = DirectCast(lst.View, Windows.Controls.GridView) For Each gvc In gv.Columns If Double.IsNaN(gvc.Width) Then gvc.Width = gvc.ActualWidth gvc.Width = Double.NaN End If Next End Sub 首先在列标题中设置名称,如下所示: <GridViewColumn Header="Description" Width="350" x:Name="lvhDescription"/> 然后调整大小修改宽度。 Private Sub winMain_SizeChanged(sender As Object, e As SizeChangedEventArgs) Handles Me.SizeChanged If Me.IsLoaded = False Then Exit Sub lvhDescription.Width = e.NewSize.Width - 665 End Sub 我想提出另一种方法来调整具有最大元素宽度的每列的大小。 在循环的帮助下对每个列表视图项执行以下操作。 调整窗口大小事件后无需更改大小。 将 UnitWidth 保留为恒定字体宽度大小。 您还可以定义 SourceUpdated 事件的委托。 GridView gv = (myListView.View as GridView); if (titleLen < c.Title.Length) { titleLen = c.Title.Length; gv.Columns[0].Width = titleLen * UnitWidth; } if (cssLen < c.CSSName.Length) { cssLen = c.CSSName.Length; gv.Columns[1].Width = cssLen * UnitWidth; } if (valueLen < c.Value.Length) { valueLen = c.Value.Length; gv.Columns[2].Width = valueLen * UnitWidth; } 尝试使用此代码, private void Window_SizeChanged(object sender, SizeChangedEventArgs e) { double remainingSpace = mylistviewname.ActualWidth; if (remainingSpace > 0) { (mylistviewname.View as GridView).Columns[1].Width = Math.Ceiling(remainingSpace / 3); (mylistviewname.View as GridView).Columns[2].Width = Math.Ceiling(remainingSpace / 3); (mylistviewname.View as GridView).Columns[3].Width = Math.Ceiling(remainingSpace / 3); } } 这里我使用 SizeChanged 事件,因此当窗口大小更改时,会触发此函数并更新 listviewheader 的宽度。我有 3 个列表视图标题,因此如果您有超过 3 个除以适当值的值,则除以 3。 <ListView ScrollViewer.VerticalScrollBarVisibility="Auto" Name="someList"> <ListView.View> <GridView> <GridViewColumn Width={Binding ElementName=someList, Path=ActualWidth/3} Header="Something" DisplayMemberBinding="{Binding Path=ShortText}" /> <GridViewColumn Width={Binding ElementName=someList, Path=ActualWidth/3} Header="Description" DisplayMemberBinding="{Binding Path=VeryLongTextWithCRs}" /> <GridViewColumn Width={Binding ElementName=someList, Path=ActualWidth/3} Header="Something Else" DisplayMemberBinding="{Binding Path=AnotherShortText}" /> </GridView> </ListView.View> </ListView> 使用@joee解决方案,它会产生“ArgumentOutOfRangeException”: System.ArgumentOutOfRangeException:'索引超出范围。必须为非负数且小于集合的大小。 Arg_ParamName_Name' 试试这个: private void UserControl_SizeChanged(object sender, SizeChangedEventArgs e) { double remainingSpace = SomeListViewName.ActualWidth; var gridView = (GridView)OrderListView.View; if (remainingSpace > 0) { foreach (var column in gridView.Columns) { column.Width = Math.Ceiling(remainingSpace / 12); } } } 就我而言,我有 12 列。因此下降了 12
在哪里放置notifyDataSetChanged();在 customAdapter 中,这样 listView 就不会丢失滚动数据
我知道网上有关于notifyDataSetChanged()的信息;以及如何使用它,但我似乎无法弄清楚如何在我的具体情况下使用它。我不知道我是否应该称它为...
由 ArrayAdapter 管理的 ListView 中 ImageView 的 onClickListener
我有一个 ListView,其中内容由自定义 ArrayAdapter 处理。我使用的布局有一个 TextView 和一个 ImageView。 布局: <
WinUI ListView 项目高度在低于特定阈值时不起作用
尽管为ListView项模板设置了边距、高度、最小高度等,但仍然存在一定的最小高度阈值,ListView似乎在其中创建了自己的cer容器...
我有一个代码,它加载新闻列表: public View onCreateView(LayoutInflater inflater, ViewGroup 容器, 捆绑已保存实例状态) { 查看view=inflater.infla...
我再次需要你的帮助。 我有一个按标题第一个字母分组的电影列表 我正在编写一个例程,当按下两个键(PageDown 和 PageUp)时,将放置在...
onEndReachedThreshold 在react-native 中的真正含义
来自文档: onEndReachedThreshold 数量 调用 onEndReached 的阈值(以像素为单位,虚拟的,非物理的)。 所以我只是想知道这意味着什么,是从顶部开始的阈值,还是......
Flutter中如何在同屏上沿着ListView显示一个widget?
我正在尝试构建一个非常简单的待办事项应用程序。它由屏幕顶部的 TextField 和 Button(表单)组成,允许用户将项目添加到 TextFie 正下方的 ListView...
嗨我想输入这段代码: 突出显示:矩形{ 颜色:黑色” 半径:5 不透明度:0.7 焦点:真实 } 进入 onclick 处理程序中的 mouseArea: 鼠标区域{ id:鼠标区域1 兹:...
WinForms ListView.HideSelection 属性没有效果?
我正在开发一个应用程序,其中使用列表视图来选择要显示的数据集。当用户单击列表项时,主视图会更新与所选内容关联的数据...
该进程无法访问该文件,因为在删除添加到图像列表和列表视图的文件时该文件正在被另一个进程使用
我想将图像文件加载到文件夹中,然后将它们添加到图像列表中,然后将其分配给列表视图以获取我单击的项目的缩略图样式,它显示在图片框中。当我想要的时候
我有一个使用 Delphi 12 的多设备形式的列表视图。 我正在尝试添加图像,但图像不只显示空白。 我不知道这是我下载图像的方式还是我必须这样做
该视图有分页,但是当我选择在一页中查看 1000 条记录时, 滚动时出现卡顿。 我有一个列表视图构建器,有什么方法可以显示表格...
我有一个绑定到项目集合的ListView。我不想显示属性 IsDeleted =“1”的项目。我怎样才能做到这一点?
如何使用viewHolder模式让UI元素在listView中保持滚动?
我正在研究使用 viewHolder 模式来使我的 UI 元素在列表视图滚动时不会重置为默认值。调查之后我不知道如何处理这个问题。我不是...
ListView 中的 .NET Maui 编辑器不接受输入
我正在将应用程序从 Xamarin 升级到 Maui。 带有 ListView 的表单曾经完美地工作,现在将不接受 Entry 或 Editor 控件中的输入,并且按钮不起作用,除非该项目是...
C# ListView ItemSelectionChanged 事件多选仅获取最后选择的项目
我在 C# .NET 4.5 中使用多选 ListView 选择多个项目(即 Shift + End 或 Shift + Click 等)时会出现此问题。这些只是许多不同鼠标/键盘的几个示例
我有一个用 Win32 C++ 创建的列表视图控件 我正在使用 ListView_SetItem 添加子项目 这只是文本,列表视图处于报告模式。我想改变 tex 的颜色...