你好,大家好
我最近遇到了一个问题
我尝试将一个数据网格放入另一个数据网格中
主数据网格有两列 - 文本和模板(这里我放了另一个数据网格)。内部数据网格有一个文本列
当主DG文本单元的高度超过内部DG单元的总高度时,问题就出现了
这样的事情:
Image
我的问题是:我可以用灰色矩形做点什么吗?我可以在行之间平均分配灰色高度吗?还是简单的拉伸行?
或者有更好的方法吗?不仅是2级数据网格,而且是3,4,5级和更复杂的数据网格。
简单的例子:
窗口:
<DockPanel>
<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False" HeadersVisibility="None" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Col1}" Width="*"/>
<DataGridTemplateColumn Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding Path=Col2}" AutoGenerateColumns="False" HeadersVisibility="None" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding}" Width="*"/>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</DockPanel>
代码背后:
public class Test1 : NotifyPropertyClass
{
private string col1;
public string Col1
{
get { return col1; }
set { col1 = value; OnPropertyChanged("Col1"); }
}
private List<string> col2;
public List<string> Col2
{
get { return col2; }
set { col2 = value; OnPropertyChanged("Col2"); }
}
}
public ObservableCollection<Test1> dc;
public MainWindow()
{
dc = new ObservableCollection<Test1>()
{
new Test1() { Col1 = "00" + Environment.NewLine + Environment.NewLine + Environment.NewLine + Environment.NewLine + "00",
Col2 = new List<string>() { "123", "456"} }
};
DataContext = dc;
InitializeComponent();
}
答案 0 :(得分:1)
如果要垂直拉伸行,可以使用绑定到父(内部)DataGrid
的转换器,并根据{{的高度设置DataGridRow
项容器的高度1}}:
DataGrid
样本用法:
namespace WpfApplication1
{
public class RowHeightConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
DataGrid dg = value as DataGrid;
if(dg != null && dg.Items.Count > 0)
{
return dg.ActualHeight / dg.Items.Count;
}
return 20; //return some default height
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
}