我正在使用RowDetailsTemplate来显示行的嵌套数据网格。现在,当我选择一行来显示这个嵌套的datagrid时,datagrid的高度会扩展。但是当取消选择行时,它不会降低它的高度。
有没有办法在折叠行详细信息后将数据网格大小调整为原始高度?
是否有可能以声明方式进行?
答案 0 :(得分:2)
使用此行为将详细信息放入StackPanel和grid:
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>
这对我有用。
答案 1 :(得分:1)
找到解决这个问题的方法;在网格的选择更改事件触发刷新网格项目时,这会导致网格重绘。
private void dgVehicles_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
DataGrid dg = sender as DataGrid;
if (dg != null)
{
dg.Items.Refresh();
}
e.Handled = true;
}
这对我有用。希望它有所帮助。
答案 2 :(得分:0)
注意:如果您需要嵌套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 Grid
中将其设置为False,它似乎神奇地起作用。现在当我折叠我的行细节时,它会适当地调整包含行的大小。“
答案 3 :(得分:-1)
设置DataGrid.VerticalAlignment = System.Windows.VerticalAlignment.Top