C# 覆盖在DataGrid内容之上
我有一个DataGrid,用户可以将文件拖放到其中,以便将其导入程序。我想在发生这种情况时添加一些用户反馈,所以当用户拖放时,我在DataGrid上放置了一个覆盖层。覆盖的当前外观如下所示: 我不喜欢覆盖在DataGrid头顶部的方式。如果可能的话,我想把覆盖范围限制在内容上。有人知道我能做这件事吗?我知道我可以硬编码标题的高度,或者创建自定义控件,但在我看来,解决方案越轻量级/不引人注目越好。这是一张我想要的图表,以防不清楚: 更多信息:在我当前的实现中,我只是将DataGrid和覆盖层都放在一个网格中,并根据需要打开和关闭覆盖层的不透明度。我的DataGrid下的瘦矩形是一个加载条。我希望覆盖层也不要覆盖它,尽管它在当前的实现中不存在,所以我认为这不是一个问题 编辑:下面是我如何解决它的,它很快很脏,但它是有效的C# 覆盖在DataGrid内容之上,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一个DataGrid,用户可以将文件拖放到其中,以便将其导入程序。我想在发生这种情况时添加一些用户反馈,所以当用户拖放时,我在DataGrid上放置了一个覆盖层。覆盖的当前外观如下所示: 我不喜欢覆盖在DataGrid头顶部的方式。如果可能的话,我想把覆盖范围限制在内容上。有人知道我能做这件事吗?我知道我可以硬编码标题的高度,或者创建自定义控件,但在我看来,解决方案越轻量级/不引人注目越好。这是一张我想要的图表,以防不清楚: 更多信息:在我当前的实现中,我只是将DataGrid和覆盖层都放在
private void UserControl_Loaded(object sender, RoutedEventArgs e) {
var header = WPFHelper.FindVisualChild<DataGridColumnHeadersPresenter>(FilesDataGrid);
// Include outside border in margin
var border = FilesDataGrid.BorderThickness;
Thickness margin = new Thickness(border.Left, border.Top, border.Right, border.Bottom);
margin.Top += header.ActualHeight;
OverlayGrid.Margin = margin;
}
没有什么比将覆盖元素的上边距设置为页眉的实际高度更轻量级/不引人注目的了。因此,如果不想使事情过于复杂,可以将边距设置为硬编码值23.96:
更灵活的解决方案是编写一种行为,在可视化树中查找DataGridColumnHeadersPresenter,并将覆盖元素的上边距设置为其实际高度。啊,值得一试。谢谢
<Grid>
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Header="..." Binding="{Binding}" />
</DataGrid.Columns>
</DataGrid>
<Border Background="Silver" Opacity="0.5" Margin="0 23.96 0 0" />
</Grid>