WPF托管Winforms控件-仅在窗口上重新计算高度或调整控件大小

时间:2019-01-22 22:35:53

标签: c# wpf winforms

我有一个在WPF上运行的应用程序窗口。在此窗口中,我有一个选项卡项目,即WPF UserControl(如下所示的“解释器”选项卡)。在此用户控件内部,有一个扩展面板,其中包含Grid的最后一个子项,该子项包含下面的控件的中间部分(十六进制框,网格拆分器和右侧的treeview)。

enter image description here

Hexbox是Be.winforms.hex.hexbox的一个实例,它是一个winforms控件。我没有发现可以替代的WPF十六进制框(我已经尝试了几次)。因此,此控件嵌入在WinFormsHost内部:

<Grid Margin="0,1,0,-1">
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition MinWidth="220" MaxWidth="718" Width="285" Name="HexboxColumnDefinition" />
        <ColumnDefinition Width="1" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <!--<control:HexEditor Name="Interpreter_HexBox" Grid.Column="0" Grid.Row="1" Width="Auto" Height="Auto" BytePerLine="4" AllowAutoHightLighSelectionByte="False" StatusBarVisibility="Collapsed" AllowDeleteByte="True" AllowExtend="True" />-->
    <WindowsFormsHost Grid.Row="0" Grid.ColumnSpan="2"   Name="Interpreter_Hexbox_Host" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <hb1:HexBox MinBytesPerLine="4" MaxBytesPerLine="16" ColumnInfoVisible="True" LineInfoVisible="True" Font="Courier New,10" BoldFont="Consolas,10" StringViewVisible="True" SelectionStartChanged="hb1_SelectionChanged" SelectionLengthChanged="hb1_SelectionChanged" VScrollBarVisible="True">
        </hb1:HexBox>
    </WindowsFormsHost>
...

初始化窗口时,十六进制框为空。里面没有数据。我所看到的是,通过选择左侧的一项来填充十六进制数据时,控件将其高度设置为显示所有数据所需的高度(有时为数千字节-超出了应用程序)。

这将导致滚动条不出现,默认情况下,对最终用户而言,您将无法滚动。我也无法以编程方式滚动到选定的字节(通过单击右侧树上的内容),因为没有实际的滚动。

但是,如果我拖动网格分割器以便控件调整大小(或调整窗口大小),则会重新计算大小并显示滚动条。

enter image description here

我无法弄清楚如何自动正确触发此行为,因此用户不必这样做。这很烦人,因为它经常出现。我不确定是否应该绑定某些东西,但是我无法弄清楚这两个项目是如何工作的。

我在此处有此提交的代码,突出显示了以下行:https://github.com/Mgamerz/ME3Explorer/blob/05309979cdebaecea4005620bacd855d20248458/ME3Explorer/Interpreter/InterpreterWPF.xaml#L73

我不确定该如何解决。必须始终调整大小非常令人沮丧,而且我不知道如何调用调整大小代码。我想我可以调整网格拆分器位置的大小,但这似乎是一个真正的技巧,有没有更合适的方法?

0 个答案:

没有答案