c# - WPF 托管 winforms 控件 - 仅在窗口或控件调整大小时重新计算高度
问题描述
我有一个在 WPF 上运行的应用程序窗口。在这个窗口内部,我有一个选项卡项,它是 WPF UserControl(如下所示的解释器选项卡)。在这个用户控件内部,我有一个停靠面板,其中包含 Grid 的最后一个子项,其中包含下面控件的中间部分(十六进制框、网格拆分器和右侧的树视图)。
Hexbox 是 Be.winforms.hex.hexbox 的一个实例,它是一个 winforms 控件。我发现没有 WPF hexbox 是可以接受的替代品(我已经尝试了几个)。所以这个控件嵌入在 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>
...
初始化窗口时,hexbox 为空。里面没有数据。我看到的是,当通过选择左侧的项目填充 hexbox 数据时,控件将其高度设置为显示所有数据所需的高度(有时是数千字节 - 超出应用程序)。
这会导致滚动条不出现,默认情况下最终用户意味着您无法滚动。我也无法以编程方式滚动到选定的字节(通过单击右侧树上的内容),因为没有实际滚动。
但是,如果我拖动 gridsplitter 以使控件调整大小(或调整窗口大小),则会重新计算大小并显示滚动条。
我无法弄清楚如何自动正确触发此行为,因此用户不必这样做。这很烦人,因为它经常出现。我不确定我是否应该绑定一些东西,但我不知道这两个项目是如何工作的。
我在这里提交了我的代码,突出显示了该行:https ://github.com/Mgamerz/ME3Explorer/blob/05309979cdebaecea4005620bacd855d20248458/ME3Explorer/Interpreter/InterpreterWPF.xaml#L73
我不知道如何解决这个问题。必须始终调整大小非常令人沮丧,而且我不知道如何调用调整大小代码。我想我可以调整网格拆分器位置的大小,但这似乎是一个真正的黑客,有没有更合适的方法?
解决方案
推荐阅读
- excel - 在名称管理器中搜索名称并设置值
- java - 使用opengl在目标图像上添加Android View边缘到边缘
- spring-boot - 如何使用 admin rest api 添加新产品?
- python - pd.read_csv 是否有可能导致 KeyError?
- mysql - “警告:PDOStatement::execute(): SQLSTATE[HY093]”的问题
- python-3.x - 如何用最后一个已知价格填写每小时时间戳的行,直到价格列发生变化并同样继续进一步
- string - 如何在lua函数中允许两种不同格式的参数?
- javascript - 特定元素(iframe)上的桌面触摸屏捏合/平移(缩放)
- botframework - 当 Bot 托管在 Azure 上时,我无法在验证器方法内的瀑布对话框中从自适应卡中检索值
- android - 从显示应用程序在后台运行的通知中打开应用程序