У меня есть окно приложения, которое работает на WPF. Внутри этого окна у меня есть элемент вкладки, который является WPF UserControl (вкладка Интерпретатор, показанная ниже). Внутри этого Usercontrol у меня есть док-панель, которая содержит последний дочерний элемент Grid, который содержит среднюю часть элемента управления ниже (гексбокс, разделитель сетки и вид дерева справа).
![enter image description here](https://i.stack.imgur.com/ddWcF.png)
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>
...
Когда окно инициализируется, гексбокс становится пустым. В нем нет данных. Я вижу, что когда данные в hexbox заполняются путем выбора элемента слева, элемент управления устанавливает его высоту на высоту, которая потребуется для отображения всех данных (иногда это тысячи байтов - за пределами высоты). приложение).
Это приводит к тому, что полоса прокрутки не появляется, что по умолчанию для конечного пользователя означает, что вы не можете прокручивать. Я также не могу программно прокрутить до выбранного байта (нажав на элементы в правом дереве), поскольку в действительности прокрутка отсутствует.
Однако, если я перетаскиваю gridsplitter, чтобы элемент управления изменял размеры (или изменял размер окна), размер пересчитывался, и появлялась полоса прокрутки.
![enter image description here](https://i.stack.imgur.com/5LFjz.png)
Я не могу понять, как правильно запустить это поведение, чтобы пользователям не приходилось это делать. Это довольно раздражает, так как возникает довольно часто. Я не уверен, должен ли я что-то связывать, но я не могу понять, как работают эти два элемента.
Здесь у меня есть код для этого коммита с выделенной строкой: https://github.com/Mgamerz/ME3Explorer/blob/05309979cdebaecea4005620bacd855d20248458/ME3Explorer/Interpreter/InterpreterWPF.xaml#L73
Я не уверен, как обойти это. Мне очень неприятно постоянно менять размер, и я не могу понять, как вызвать код изменения размера. Я полагаю, что могу просто изменить размер позиции разделителя сетки, но это похоже на настоящий взлом, есть ли более правильный способ?