1

我有 Scrollviewer,其中包含一个带有 WindowsFormsHost 的框架。WindowsFormsHost 包含一个 DataGridView(请不要问我为什么不使用 WPF DataGrid 控件执行此操作)。

因为 DataGridView 在使用 scrollviewer 滚动时会导致显示错误,所以我禁用了 scrollviewer 并在我的 DataGridView 上启用了滚动。

    <Grid x:Name="LayoutRoot">
        <WindowsFormsHost HorizontalAlignment="Stretch" Name="_windowsFormsHostGrid" VerticalAlignment="Stretch">
            <Win.Grid:DataGridView x:Name="_buchungGrid" ScrollBars="Both" BorderStyle="None" BackgroundColor="#F7F8FA" CellFormatting="_gridBuchungen_CellFormatting" SelectionChanged="GridSelectionChanged" DoubleClick="_buchungInovaGrid_DoubleClick" AutoSize="True" AutoColumnWidthMode="Window" ZebraColor="LightGray" Anchor="Left" Dock="Fill" />
        </WindowsFormsHost>
    </Grid>

这似乎有效。只要我不调整窗口大小。当我调整窗口大小时(这将导致所有子元素调整大小,包括滚动查看器、框架和 WindowsFormsHost),我的 DataGridView 的滚动条消失了,我不再能够滚动我的网格。我可以调整到窗口的旧大小,但滚动条仍然隐藏。

知道为什么会发生这种情况以及如何解决吗?我也不确定它们为什么会消失,因为我只调整了一个像素的大小并且会发生这种情况。

4

2 回答 2

0

这个问题似乎没有解决方案。我最终使用了 WPF DataGrid 并通过我需要的功能对其进行了扩展。

WinForms 将一直绘制在所有其他元素的顶部。唯一的解决方案似乎是在它周围包裹一个窗口以固定滚动,但这会很难看。

于 2012-03-12T15:45:45.223 回答
0

给定 WindowsFormsHost 内的 Forms.UserControl (myUserControl) 内的 Forms.DataGridView (dgv),我发现 DGV 的尺寸比 UC 大,因此滚动条不可见。(如果 UC 位于 WinForm 中,滚动条会按预期显示;WFHost 中的调整大小逻辑似乎存在问题。)

我能够在我的 UC 的 SizeChanged 处理程序中解决这个问题:

// VB code:
Public Class MyUserControl
...
Private Sub MyUserControl_SizeChanged(sender As Object, e As EventArgs) Handles MyBase.SizeChanged
        ' dgv.Size is much larger than it should be; not sure why.
        ' my dgv has controls above it, but extends all the way to bottom and right;
        ' if yours does not, then subtract more as needed.
        dgv.Size = New Size(Me.Size.Width - dgv.Left, Me.Size.Height - dgv.Top)
End Sub
...
End Class

结果是 WinForms 绘图停留在它应该在的区域内;滚动是在 WinForms 中完成的。(不使用 WPF 滚动查看器。)


WPF 的 XAML:

...
xmlns:mywf="clr-namespace:MyWinFormAssembly;assembly=MyWinFormAssembly"
...

<WindowsFormsHost>
    <mywf:MyUserControl />
</WindowsFormsHost>
于 2019-03-17T20:09:55.020 回答