【发布时间】:2018-05-19 02:49:56
【问题描述】:
我想让我的用户界面更负责,现在我遇到了这个问题:
<ScrollViewer VerticalScrollBarVisibility="Auto">
<DockPanel LastChildFill="True">
<StatusBar HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" DockPanel.Dock="Bottom">
<StatusBarItem>
<Ellipse Width="15" Height="15" Fill="{Binding StatusColor}"></Ellipse>
</StatusBarItem>
<StatusBarItem>
<TextBlock Text="{Binding StatusText}" ToolTip="{Binding StatusToolTip}"></TextBlock>
</StatusBarItem>
<StatusBarItem HorizontalAlignment="Right">
<TextBlock Text="{Binding StatusLastAction}"></TextBlock>
</StatusBarItem>
</StatusBar>
<Grid DockPanel.Dock="Bottom" Margin="0,0,0,10">
//
// Fields to edid data from MySelectedItem
//
</Grid>
<Grid DockPanel.Dock="Top">
<DataGrid MinHeight="150" AutoGenerateColumns="True" SelectedItem="{Binding MySelectedItem}" HorizontalAlignment="Stretch" Margin="10,10,10,0" VerticalAlignment="Stretch" ItemsSource="{Binding MyItems}" IsReadOnly="True"/>
</Grid>
</DockPanel>
</ScrollViewer>
这就像一个魅力,直到DataGrid 获得许多项目。网格不会创建自己的滚动查看器,它只是使用“主”-ScrollViewer 的全高。 (见下图 - 右下角)
黑色 > Window
绿色 > Scrollviewer
红色 > DataGrid
橙色 > fields to edit data
左上图(好):
- 窗口中有足够的空间显示所有内容
-
DataGrid(红色)填充可用空间,如果要显示的项目太多,则有自己的 scoll 查看器
右上角的图片(好):
- 空间不足,无法全部显示
- “DataGrid”使用最小高度,
ScrollViewer(绿色)可见以显示其余部分(橙色)
左下图(坏):
- 空间不足,无法全部显示
-
DataGrid不使用最小高度
右下图(坏):
- 有足够的空间展示所有内容
-
DataGrid使用所有需要的空间来显示所有Item
有没有办法设计如上图所示的 UI?
【问题讨论】:
-
看起来
MaxHeight在 DataGrid 上设置应该会有所帮助 -
当我设置
MaxHeight时,它在某些时候不会响应。所以这不是一个真正的机会......但感谢你的想法! -
在数据网格中使用滚动视图并设置其
MaxHeight<DataGrid ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.CanContentScroll="True" > -
@CelsoLívero 当我设置 MaxHeight 时它不会响应......所以这不是我想要的......
-
@bene_rawr 这是一种适合您的场景的独特方式,例如,将 DataGrid 的
MaxHeight设置为屏幕可见区域的 90%,看,只是,让我们MaxHeight,也就是说,它可能仍然更小,但不会更大,MaxHeight = {Binding MaxHeightProperty},在你的ViewModel中你可以计算MaxHeight
标签: c# wpf datagrid scrollviewer dockpanel