我正在使用 RowDetailsTemplate 显示一行的嵌套数据网格。现在,当我选择一行来显示这个嵌套的数据网格时,数据网格的高度会扩大。但是当取消选择该行时,它不会降低其高度。
行详细信息折叠后,有没有办法将数据网格调整为其原始高度?
是否可以以声明方式进行?
我正在使用 RowDetailsTemplate 显示一行的嵌套数据网格。现在,当我选择一行来显示这个嵌套的数据网格时,数据网格的高度会扩大。但是当取消选择该行时,它不会降低其高度。
行详细信息折叠后,有没有办法将数据网格调整为其原始高度?
是否可以以声明方式进行?
使用此行为将细节放入 StackPanel 和网格:
public class DataGridDetailResizeBehavior : Behavior<FrameworkElement>
{
protected override void OnAttached()
{
base.OnAttached();
this.AssociatedObject.SizeChanged += new SizeChangedEventHandler(Element_SizeChanged);
}
protected override void OnDetaching()
{
this.AssociatedObject.SizeChanged -= new SizeChangedEventHandler(Element_SizeChanged);
base.OnDetaching();
}
private void Element_SizeChanged(object sender, SizeChangedEventArgs e)
{
//Find DataGridDetailsPresenter
DataGridDetailsPresenter rowDetailPresenter = null;
var element = this.AssociatedObject;
while (element != null)
{
rowDetailPresenter = element as DataGridDetailsPresenter;
if (rowDetailPresenter != null)
{
break;
}
element = (FrameworkElement)VisualTreeHelper.GetParent(element);
}
if (rowDetailPresenter != null)
{
var row = UIHelper.GetParentOf<DataGridRow>(this.AssociatedObject);
if (row != null && row.DetailsVisibility == Visibility.Visible)
{
//Set height
rowDetailPresenter.ContentHeight = this.AssociatedObject.ActualHeight;
}
}
}
}
XAML 看起来像这样:
<sdk:DataGrid.RowDetailsTemplate>
<DataTemplate>
<StackPanel>
<Grid>
<sdk:DataGrid...
<i:Interaction.Behaviors>
<myinteractivity:DataGridDetailResizeBehavior />
</i:Interaction.Behaviors>
</Grid>
</StackPanel>
</DataTemplate>
</sdk:DataGrid.RowDetailsTemplate>
这对我有用。
找到解决此问题的方法;在网格的选择更改事件上触发网格项目的刷新,这会导致网格重绘自身。
private void dgVehicles_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
DataGrid dg = sender as DataGrid;
if (dg != null)
{
dg.Items.Refresh();
}
e.Handled = true;
}
这对我有用。希望能帮助到你。
注意:如果您需要嵌套DataGrid
有独立滚动,那么这对您不起作用。OP的问题中没有提到这个细节。
我意识到这是一个旧线程,但我在寻找解决问题的方法时偶然发现了它,并认为其他人可能想看看我发现了什么。我没有尝试 HolaJan 建议的行为方法,因为我认为我正在寻找更清洁的解决方案来解决我的问题。也就是说,我确实在 MSDN 论坛上找到了一个帖子,用于ScrollViewer.CanContentScroll="False"
在DataGrid
.
我找到解决方案的帖子位于:http ://social.msdn.microsoft.com/Forums/is/wpf/thread/a0e7aea8-e9ad-441f-a775-1178aab75fb0
答案在于标记的答案,并且是:
“我似乎通过设置一个完全不相关的设置解决了这个问题。
在我的子网格中,我ScrollViewer.CanContentScroll
设置为True
. 一旦我在所有 Child 中将其设置为 False ,Grid
它似乎就神奇地起作用了。现在,当我折叠行详细信息时,它会适当地调整包含行的大小。”
设置DataGrid.VerticalAlignment = System.Windows.VerticalAlignment.Top