У меня есть приложение WPF, которое должно быть восприимчивым. Я хочу иметь DataGrid
внутри Grid
. Когда окно масштабируется, я хочу сначала изменить размер Grid
, а затем DataGrid
. Вот что я сделал до сих пор:
В gif сверху вы можете видеть, что сначала изменяется размер Grid
, и когда он достигает минимального размера масштабирования, он переходит в нижнее DataGrid
. Не совсем то, что я хочу, потому что я хочу сначала масштабировать макет, а затем показывать полосу прокрутки в DataGrid
вместо того, чтобы макет просто переходил на нее. Поэтому я попробовал следующее:
Здесь вы можете видеть, что он показывает полосы прокрутки, как я хочу. Единственное, что он сначала изменяет размер DataGrid, и когда он изменил размер DataGrid, он начинает изменять размер сетки. Я хочу, чтобы это было наоборот, сначала измените размер сетки, затем измените размер DataGrid и покажите полосы прокрутки. Поэтому в основном я ищу решение, которое делает следующее:
- Масштабируйте окно, которое масштабирует сетку.
- Масштабировать сетку до минимального размера.
- Когда он достиг минимального размера и все еще становится меньше, покажите полосу прокрутки в DataGrid.
Итак, это сводится к первому Gif из этого вопроса, за которым следуют полосы прокрутки в DataGrid
Есть ли способ сделать это? Похоже, я очень близок, потому что это комбинация этих двух вещей, но я не знаю, как это сделать. Здесь мой код:
<Grid Grid.Row="1" HorizontalAlignment="Right" Grid.Column="0">
<Grid ShowGridLines="False">
<Grid.RowDefinitions>
<RowDefinition MaxHeight="50"/>
<RowDefinition Height="auto"/>
<RowDefinition MaxHeight="20"/>
<RowDefinition Height="auto"/>
<RowDefinition MaxHeight="5"/>
<RowDefinition Height="auto"/>
<RowDefinition MaxHeight="5"/>
<RowDefinition Height="auto"/>
<RowDefinition MaxHeight="5"/>
<RowDefinition Height="auto"/>
<RowDefinition MaxHeight="50"/>
<RowDefinition Height="auto"/>
<RowDefinition MaxHeight="50"/>
<RowDefinition Height="auto"/>
<RowDefinition MaxHeight="5"/>
<RowDefinition Name="DataGridRow" Height="*" MaxHeight="240" />
</Grid.RowDefinitions>
<Label Grid.Row="1" FontSize="24">Test</Label>
<Label Grid.Row="3" Content="Test"/>
<ComboBox Grid.Row="5" MaxWidth="500" MinWidth="300" HorizontalAlignment="Left" />
<Label Grid.Row="7" Content="Test"/>
<ComboBox Grid.Row="9" MaxWidth="500" MinWidth="300" HorizontalAlignment="Left"/>
<Separator Grid.Row="11"/>
<Label Grid.Row="13" Content="Test" />
<Grid Grid.Row="15">
<DataGrid
RowHeight="40"
CanUserAddRows="False"
x:Name="dataGrid"
AutoGenerateColumns="False"
CanUserResizeColumns="True"
HeadersVisibility="None"
GridLinesVisibility="None"
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Visible"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Width="*" Binding="{Binding Name}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Margin" Value="2,0,0,0"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Grid>
</Grid>