问题描述
WPF的DataGrid,当数据较少时,下方会出现空白:如何实现下面的效果:注意,只有一行数据,下方的行是背景。
解决方案
解决方案二:
本身都没有那么多条目数据干嘛要显示到底部。第一张图区域属于DataGrid么?
解决方案三:
属于啊,那个红圈部分是DataGrid的背景区域。
解决方案四:
引用1楼duanzi_peng的回复:
本身都没有那么多条目数据干嘛要显示到底部。第一张图区域属于DataGrid么?
属于啊,那个红圈部分是DataGrid的背景区域。这个纯粹是为了效果,不是说没有这么多条目数据就不要显示到底部。
解决方案五:
引用3楼mjy448634095的回复:
Quote: 引用1楼duanzi_peng的回复:
本身都没有那么多条目数据干嘛要显示到底部。第一张图区域属于DataGrid么?属于啊,那个红圈部分是DataGrid的背景区域。这个纯粹是为了效果,不是说没有这么多条目数据就不要显示到底部。
这个是样式问题。
解决方案六:
引用4楼duanzi_peng的回复:
Quote: 引用3楼mjy448634095的回复:
Quote: 引用1楼duanzi_peng的回复:
本身都没有那么多条目数据干嘛要显示到底部。第一张图区域属于DataGrid么?属于啊,那个红圈部分是DataGrid的背景区域。这个纯粹是为了效果,不是说没有这么多条目数据就不要显示到底部。
这个是样式问题。
我知道是样式问题,可是我修改样式无法解决这个问题。canyou?
解决方案七:
somebody?
解决方案八:
引用5楼mjy448634095的回复:
Quote: 引用4楼duanzi_peng的回复:
Quote: 引用3楼mjy448634095的回复:
Quote: 引用1楼duanzi_peng的回复:
本身都没有那么多条目数据干嘛要显示到底部。第一张图区域属于DataGrid么?属于啊,那个红圈部分是DataGrid的背景区域。这个纯粹是为了效果,不是说没有这么多条目数据就不要显示到底部。
这个是样式问题。
我知道是样式问题,可是我修改样式无法解决这个问题。canyou?
你的样式呢?贴出来
解决方案九:
引用7楼duanzi_peng的回复:
Quote: 引用5楼mjy448634095的回复:
Quote: 引用4楼duanzi_peng的回复:
Quote: 引用3楼mjy448634095的回复:
Quote: 引用1楼duanzi_peng的回复:
本身都没有那么多条目数据干嘛要显示到底部。第一张图区域属于DataGrid么?属于啊,那个红圈部分是DataGrid的背景区域。这个纯粹是为了效果,不是说没有这么多条目数据就不要显示到底部。
这个是样式问题。
我知道是样式问题,可是我修改样式无法解决这个问题。canyou?
你的样式呢?贴出来
我的样式没解决问题就删了,没解决贴出来也没用啊。这个问题我搜GOOGLE也只找到一个歪果人提过这个问题,也是没有人能解决。
解决方案十:
这个样式怎么样??你把你的样式贴出来,我给你解决呀。
解决方案十一:
可以取个巧,你把数据源绑定在一个DataTable里面,然后判断DataTable的行数量够不够填满,不够就给DataTable增加空的行。whlie(dt.rows.count<10){DataRowdr=dt.newrow();dt.add(dr);}
解决方案十二:
引用9楼duanzi_peng的回复:
这个样式怎么样??你把你的样式贴出来,我给你解决呀。
代码太长了,贴不上来,怎么办?
解决方案十三:
引用8楼mjy448634095的回复:
Quote: 引用7楼duanzi_peng的回复:
Quote: 引用5楼mjy448634095的回复:
Quote: 引用4楼duanzi_peng的回复:
Quote: 引用3楼mjy448634095的回复:
Quote: 引用1楼duanzi_peng的回复:
本身都没有那么多条目数据干嘛要显示到底部。第一张图区域属于DataGrid么?属于啊,那个红圈部分是DataGrid的背景区域。这个纯粹是为了效果,不是说没有这么多条目数据就不要显示到底部。
这个是样式问题。
我知道是样式问题,可是我修改样式无法解决这个问题。canyou?
你的样式呢?贴出来
我的样式没解决问题就删了,没解决贴出来也没用啊。这个问题我搜GOOGLE也只找到一个歪果人提过这个问题,也是没有人能解决。
你这样式不行啊,跟我的要求不符,下面还有空白。
解决方案十四:
引用9楼duanzi_peng的回复:
这个样式怎么样??你把你的样式贴出来,我给你解决呀。
<Windowx:Class="wpfTest.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:wpfTest"xmlns:controls="clr-namespace:wpfTest.controls"xmlns:sys="clr-namespace:System;assembly=mscorlib"mc:Ignorable="d"Title="MainWindow"Height="500"Width="700"><Window.Resources><StyleTargetType="DataGridRow"><SetterProperty="SnapsToDevicePixels"Value="True"/><SetterProperty="Background"Value="GhostWhite"/><SetterProperty="FontWeight"Value="Normal"/><SetterProperty="ContextMenu"Value="{x:Null}"/><Style.Triggers><TriggerProperty="AlternationIndex"Value="1"><SetterProperty="Background"Value="#FFF4F4F4"/></Trigger><TriggerProperty="IsMouseOver"Value="True"><SetterProperty="Background"Value="#FFD6EDB3"/></Trigger><TriggerProperty="IsSelected"Value="True"><SetterProperty="Background"Value="#FFE8F6D8"/></Trigger></Style.Triggers></Style><StyleTargetType="{x:TypeDataGrid}"><SetterProperty="Foreground"Value="{DynamicResource{x:StaticSystemColors.ControlTextBrushKey}}"/><SetterProperty="BorderBrush"><Setter.Value><LinearGradientBrushEndPoint="0.5,1"StartPoint="0.5,0"><GradientStopColor="{DynamicResourceBorderLightColor}"Offset="0"/><GradientStopColor="{DynamicResourceBorderDarkColor}"Offset="1"/></LinearGradientBrush></Setter.Value></Setter><SetterProperty="BorderThickness"Value="1"/><SetterProperty="RowDetailsVisibilityMode"Value="VisibleWhenSelected"/><SetterProperty="ScrollViewer.CanContentScroll"Value="true"/><SetterProperty="ScrollViewer.PanningMode"Value="Both"/><SetterProperty="Stylus.IsFlicksEnabled"Value="False"/><SetterProperty="Template"><Setter.Value><ControlTemplateTargetType="{x:TypeDataGrid}"><Borderx:Name="border"SnapsToDevicePixels="True"BorderBrush="{TemplateBindingBorderBrush}"BorderThickness="{TemplateBindingBorderThickness}"Padding="{TemplateBindingPadding}"><Border.Background><SolidColorBrushColor="{DynamicResourceControlLightColor}"/></Border.Background><VisualStateManager.VisualStateGroups><VisualStateGroupx:Name="CommonStates"><VisualStatex:Name="Disabled"><Storyboard><ColorAnimationUsingKeyFramesStoryboard.TargetName="border"Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"><EasingColorKeyFrameKeyTime="0"Value="{DynamicResourceControlLightColor}"/></ColorAnimationUsingKeyFrames></Storyboard></VisualState><VisualStatex:Name="Normal"/></VisualStateGroup></VisualStateManager.VisualStateGroups><ScrollViewerx:Name="DG_ScrollViewer"Focusable="false"Background="Black"><ScrollViewer.Template><ControlTemplateTargetType="{x:TypeScrollViewer}"><Grid><Grid.ColumnDefinitions><ColumnDefinitionWidth="Auto"/><ColumnDefinitionWidth="*"/></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinitionHeight="Auto"/><RowDefinitionHeight="*"/><RowDefinitionHeight="Auto"/></Grid.RowDefinitions><ButtonFocusable="false"Command="{x:StaticDataGrid.SelectAllCommand}"Style="{DynamicResource{ComponentResourceKeyResourceId=DataGridSelectAllButtonStyle,TypeInTargetAssembly={x:TypeDataGrid}}}"Visibility="{BindingHeadersVisibility,ConverterParameter={x:StaticDataGridHeadersVisibility.All},Converter={x:StaticDataGrid.HeadersVisibilityConverter},RelativeSource={RelativeSourceAncestorType={x:TypeDataGrid}}}"Width="{BindingCellsPanelHorizontalOffset,RelativeSource={RelativeSourceAncestorType={x:TypeDataGrid}}}"/><DataGridColumnHeadersPresenterx:Name="PART_ColumnHeadersPresenter"Grid.Column="1"Grid.ColumnSpan="2"Visibility="{BindingHeadersVisibility,ConverterParameter={x:StaticDataGridHeadersVisibility.Column},Converter={x:StaticDataGrid.HeadersVisibilityConverter},RelativeSource={RelativeSourceAncestorType={x:TypeDataGrid}}}"/><BorderGrid.ColumnSpan="2"Grid.Row="1"Height="{BindingRelativeSource={RelativeSourceMode=FindAncestor,AncestorType=DataGrid},Path=Height}"Background="{BindingRelativeSource={RelativeSourceMode=FindAncestor,AncestorType=DataGrid},Path=Background}"><ScrollContentPresenterx:Name="PART_ScrollContentPresenter"CanContentScroll="{TemplateBindingCanContentScroll}"/></Border><ScrollBarx:Name="PART_VerticalScrollBar"HorizontalAlignment="Right"Grid.Row="1"Grid.ColumnSpan="2"ViewportSize="{TemplateBindingViewportHeight}"Maximum="{TemplateBindingScrollableHeight}"Visibility="{TemplateBindingComputedVerticalScrollBarVisibility}"Value="{BindingVerticalOffset,Mode=OneWay,RelativeSource={RelativeSourceTemplatedParent}}"><ScrollBar.Template><ControlTemplate><Trackx:Name="PART_Track"IsDirectionReversed="true"><Track.DecreaseRepeatButton><RepeatButtonCommand="ScrollBar.LineUpCommand"Background="Transparent"BorderThickness="0"/></Track.DecreaseRepeatButton>
解决方案十五:
引用12楼mjy448634095的回复:
Quote: 引用8楼mjy448634095的回复:
Quote: 引用7楼duanzi_peng的回复:
Quote: 引用5楼mjy448634095的回复:
Quote: 引用4楼duanzi_peng的回复:
Quote: 引用3楼mjy448634095的回复:
Quote: 引用1楼duanzi_peng的回复:
本身都没有那么多条目数据干嘛要显示到底部。第一张图区域属于DataGrid么?属于啊,那个红圈部分是DataGrid的背景区域。这个纯粹是为了效果,不是说没有这么多条目数据就不要显示到底部。
这个是样式问题。
我知道是样式问题,可是我修改样式无法解决这个问题。canyou?
你的样式呢?贴出来
我的样式没解决问题就删了,没解决贴出来也没用啊。这个问题我搜GOOGLE也只找到一个歪果人提过这个问题,也是没有人能解决。
你这样式不行啊,跟我的要求不符,下面还有空白。
那你就别设置datagrid的高度。
解决方案:
引用14楼duanzi_peng的回复:
Quote: 引用12楼mjy448634095的回复:
Quote: 引用8楼mjy448634095的回复:
Quote: 引用7楼duanzi_peng的回复:
Quote: 引用5楼mjy448634095的回复:
Quote: 引用4楼duanzi_peng的回复:
Quote: 引用3楼mjy448634095的回复:
Quote: 引用1楼duanzi_peng的回复:
本身都没有那么多条目数据干嘛要显示到底部。第一张图区域属于DataGrid么?属于啊,那个红圈部分是DataGrid的背景区域。这个纯粹是为了效果,不是说没有这么多条目数据就不要显示到底部。
这个是样式问题。
我知道是样式问题,可是我修改样式无法解决这个问题。canyou?
你的样式呢?贴出来
我的样式没解决问题就删了,没解决贴出来也没用啊。这个问题我搜GOOGLE也只找到一个歪果人提过这个问题,也是没有人能解决。
你这样式不行啊,跟我的要求不符,下面还有空白。
那你就别设置datagrid的高度。
那也不行,这个控件是放在界面中间的,预留的空间已经给好了,高度是固定的。顺便问下,代码太长,怎么贴出来啊?
解决方案:
引用15楼mjy448634095的回复:
Quote: 引用14楼duanzi_peng的回复:
Quote: 引用12楼mjy448634095的回复:
Quote: 引用8楼mjy448634095的回复:
Quote: 引用7楼duanzi_peng的回复:
Quote: 引用5楼mjy448634095的回复:
Quote: 引用4楼duanzi_peng的回复:
Quote: 引用3楼mjy448634095的回复:
Quote: 引用1楼duanzi_peng的回复:
本身都没有那么多条目数据干嘛要显示到底部。第一张图区域属于DataGrid么?属于啊,那个红圈部分是DataGrid的背景区域。这个纯粹是为了效果,不是说没有这么多条目数据就不要显示到底部。
这个是样式问题。
我知道是样式问题,可是我修改样式无法解决这个问题。canyou?
你的样式呢?贴出来
我的样式没解决问题就删了,没解决贴出来也没用啊。这个问题我搜GOOGLE也只找到一个歪果人提过这个问题,也是没有人能解决。
你这样式不行啊,跟我的要求不符,下面还有空白。
那你就别设置datagrid的高度。
那也不行,这个控件是放在界面中间的,预留的空间已经给好了,高度是固定的。顺便问下,代码太长,怎么贴出来啊?
那这就跟样式没关系了。用#10楼的方法。
解决方案:
引用10楼China_LY11的回复:
可以取个巧,你把数据源绑定在一个DataTable里面,然后判断DataTable的行数量够不够填满,不够就给DataTable增加空的行。whlie(dt.rows.count<10){DataRowdr=dt.newrow();dt.add(dr);}
你这DataTable怎么跟我的不一样啊,能给个代码示例么?
解决方案:
引用17楼mjy448634095的回复:
Quote: 引用10楼China_LY11的回复:
可以取个巧,你把数据源绑定在一个DataTable里面,然后判断DataTable的行数量够不够填满,不够就给DataTable增加空的行。whlie(dt.rows.count<10){DataRowdr=dt.newrow();dt.add(dr);}你这DataTable怎么跟我的不一样啊,能给个代码示例么?
不好意思,我看错了。我当成winform的去了。我的意思是给DataGird的数据源添加空行。wfp里面应该也是可以的。
解决方案:
引用18楼China_LY11的回复:
Quote: 引用17楼mjy448634095的回复:
Quote: 引用10楼China_LY11的回复:
可以取个巧,你把数据源绑定在一个DataTable里面,然后判断DataTable的行数量够不够填满,不够就给DataTable增加空的行。whlie(dt.rows.count<10){DataRowdr=dt.newrow();dt.add(dr);}你这DataTable怎么跟我的不一样啊,能给个代码示例么?
不好意思,我看错了。我当成winform的去了。我的意思是给DataGird的数据源添加空行。wfp里面应该也是可以的。
添加空行这个我已经试过了,这样的话,下面的空行是有正常行的效果的,比如MOSEOVER效果、选中效果等,这个不符合要求。
解决方案:
还有谁?!!!!!!!!!
解决方案:
引用20楼mjy448634095的回复:
还有谁?!!!!!!!!!
直接告诉你,这种功能目前实现不了。
解决方案:
引用21楼duanzi_peng的回复:
Quote: 引用20楼mjy448634095的回复:
还有谁?!!!!!!!!!直接告诉你,这种功能目前实现不了。
好吧。只好自己写一个控件了。
解决方案:
放一张背景图搞掂。不知是否明白我的意思。
解决方案:
本来空白的地方,看到了间隔行的背景图,以假乱真。
解决方案:
引用24楼leo2003的回复:
本来空白的地方,看到了间隔行的背景图,以假乱真。
额,列分隔线怎么处理,列是可拉动的。
解决方案:
引用25楼mjy448634095的回复:
Quote: 引用24楼leo2003的回复:
本来空白的地方,看到了间隔行的背景图,以假乱真。额,列分隔线怎么处理,列是可拉动的。
非真实的行,可以只要横纹呀,用户也好识别。
解决方案:
引用26楼leo2003的回复:
Quote: 引用25楼mjy448634095的回复:
Quote: 引用24楼leo2003的回复:
本来空白的地方,看到了间隔行的背景图,以假乱真。额,列分隔线怎么处理,列是可拉动的。
非真实的行,可以只要横纹呀,用户也好识别。
大神,说再多没用,求给个代码示例。
解决方案:
引用26楼leo2003的回复:
Quote: 引用25楼mjy448634095的回复:
Quote: 引用24楼leo2003的回复:
本来空白的地方,看到了间隔行的背景图,以假乱真。额,列分隔线怎么处理,列是可拉动的。
非真实的行,可以只要横纹呀,用户也好识别。
不能只是横纹,必须得要列分隔线。
解决方案:
引用25楼mjy448634095的回复:
Quote: 引用24楼leo2003的回复:
本来空白的地方,看到了间隔行的背景图,以假乱真。额,列分隔线怎么处理,列是可拉动的。
没有列分隔线的情况我早就实现了。就那个列分隔线不好处理。
解决方案:
引用29楼mjy448634095的回复:
Quote: 引用25楼mjy448634095的回复:
Quote: 引用24楼leo2003的回复:
本来空白的地方,看到了间隔行的背景图,以假乱真。额,列分隔线怎么处理,列是可拉动的。
没有列分隔线的情况我早就实现了。就那个列分隔线不好处理。
没招,我也不会。
解决方案:
按背景下面的自己重绘一下是的。wpf这东西还没淘汰呢
解决方案:
我们的实现是把条形背景作为整个DataGrid背景,然后把Row的背景透明,接着让DataGrid按行滚动。妥妥的。
解决方案:
引用32楼muzizongheng的回复:
我们的实现是把条形背景作为整个DataGrid背景,然后把Row的背景透明,接着让DataGrid按行滚动。妥妥的。
可是列是可以拖动的,那个列分隔线如何实现?
解决方案:
引用33楼mjy448634095的回复:
Quote: 引用32楼muzizongheng的回复:
我们的实现是把条形背景作为整个DataGrid背景,然后把Row的背景透明,接着让DataGrid按行滚动。妥妥的。可是列是可以拖动的,那个列分隔线如何实现?
简单,自定义DataGrid的Celltemplate,背景透明但border的右边有值,比如为2.
解决方案:
引用34楼muzizongheng的回复:
Quote: 引用33楼mjy448634095的回复:
Quote: 引用32楼muzizongheng的回复:
我们的实现是把条形背景作为整个DataGrid背景,然后把Row的背景透明,接着让DataGrid按行滚动。妥妥的。可是列是可以拖动的,那个列分隔线如何实现?
简单,自定义DataGrid的Celltemplate,背景透明但border的右边有值,比如为2.
简单,谁都会说,求大神给示例。要做的效果和图2一样的。
解决方案:
这个怎么搞,看看大神们谁知道!
解决方案:
给数据源插入空行
解决方案:
引用37楼wf5360308的回复:
给数据源插入空行
麻烦你看完所有楼上再谈你的看法。