Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 覆盖在DataGrid内容之上_C#_Wpf_Datagrid - Fatal编程技术网

C# 覆盖在DataGrid内容之上

C# 覆盖在DataGrid内容之上,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一个DataGrid,用户可以将文件拖放到其中,以便将其导入程序。我想在发生这种情况时添加一些用户反馈,所以当用户拖放时,我在DataGrid上放置了一个覆盖层。覆盖的当前外观如下所示: 我不喜欢覆盖在DataGrid头顶部的方式。如果可能的话,我想把覆盖范围限制在内容上。有人知道我能做这件事吗?我知道我可以硬编码标题的高度,或者创建自定义控件,但在我看来,解决方案越轻量级/不引人注目越好。这是一张我想要的图表,以防不清楚: 更多信息:在我当前的实现中,我只是将DataGrid和覆盖层都放在

我有一个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>