用于自动调整控件或元素大小以容纳其内容的用户界面实现。
C# DataGridView,自动计算RowHeaders大小
我有一个继承自 DataGrieviw 的自定义 Gridview,并设置了自动 RowHeadersWidthSizeMode。 RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders; 看来...
假设我有以下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
Powershell - DataViewGrid - 列自动调整大小
对于 .NET 和 powershell,我完全是个新手,想知道你们是否可以提供帮助。我正在从表单上的 .CSV 生成数据网格,并希望网格自动调整列大小
为什么 controlSize 属性在 SwiftUI 中不起作用?
https://developer.apple.com/documentation/swiftui/view/controlsize(_:) 连苹果官方文档网站上的代码都无法运行 结构控制大小:视图{ var body: 一些视图 { V...
Android:如何在 Kotlin 中获取自动调整大小的 TextView 的实际文本大小?
有时需要为多个自动调整大小的 TextView 设置相同的 textSize。例如,“数字输入”EditText 旁边的“单位”TextView。 然而,目前
在 WPF DataGrid 中,是否可以将列的大小调整为最后一列填充空白空间的内容,同时仍然允许水平滚动条?
我不知道如何在有限的标题中正确表达我的问题,所以我会尽力解释它。我制作了用于展示的动图,但在我没有足够的声誉点后注意到。 编辑:我
我尝试找出 UILabel 中关于顶部约束的自动收缩选项。 我有 UIView 和三个标签。其中之一具有自动收缩选项。它有居中约束,并且有 Tra...
我遇到了响应文本的问题。在我的应用程序中有不同的文本字体大小,我需要使它们响应不同的屏幕尺寸(仅限手机和设备方向纵向)。我也...
当我使用 Element Plus for Vue 3 创建的输入(文本区域)自动调整大小时,在文本到达正在键入的行末尾之前会创建一个新行。这使得输入框不必要地...
我目前正在努力使并排图像变得动态,这样无论它们在什么屏幕上,它们都可以保持并排。然而,这些图像也有不同的比例;所以,我正在使用 Flex
我使用以下代码来自动调整电子表格中的列大小: 对于 (int i = 0; i < columns.size(); i++) { sheet.autoSizeColumn(i, true); sheet.setColumnWidth(i, sheet.getColumnW...
我正在尝试使用我的脚手架列小部件中的 MainAxisSize.min 让对话框自动调整大小以适应其所有内容,但我仍然得到该小部件的完整长度。为什么 MainAxisSize.min doe...
我正在使用 SlickGrid 并努力寻找一个优雅的解决方案来解决以下问题: 所有列在首次渲染时必须具有特定的初始宽度,但之后可以调整大小 最后的专栏...
我在 PowerPoint 中使用 VBA。 我执行了以下代码,但 AutoSize 不起作用。 创建一个页面,在该页面中创建标题和文本框。 文本框不会自动适合。 请帮我。 ...
{ xtype: panel, layout: 'form', columnWidth: 0.3, items: [{ xtype: 'combo', fieldLabel: 'Sample' }]}。
无法将AutoSize属性设置为动态创建的TextBox C#VS 2017
我正在运行时创建TextBoxes,需要它们具有固定的宽度。但是,正如我期望用户的大量输入一样,它应该是多行的,因此会增加其高度。我有...
我在.NET WinForms应用程序中有记录,当记录可编辑时,我在面板上使用增强的TextBox控件进行布局,但是当记录不可编辑时,我将TextBoxes设置为ReadOnly。 ...
我有一个WinForms应用程序,该应用程序旨在支持Full HD分辨率(so 1920x1080)。现在,该应用程序还应该以较低的分辨率运行:1600x900。有没有办法让...
我的视图无法拉伸以适应当前方向!我正在创建一个标签栏应用程序。我复制了您在“创建新的标签栏应用程序”时创建的示例。一切正常...
我可以在“编辑源代码”中输入什么代码来设置SharePoint网站的宽度和高度? 正文{宽度:100%;高度:100%; } 上面的...