Tôi có một ứng dụng WPF cần phải đáp ứng. Những gì tôi muốn có là một DataGrid
bên trong một Grid
. Khi cửa sổ giảm xuống, tôi muốn Grid
đổi kích thước trước và sau đó là DataGrid
. Dưới đây là những gì tôi đạt được cho đến nay:Thay đổi thứ tự mở rộng WPF
Trong gif trên đầu bạn có thể thấy rằng Grid
thay đổi kích thước đầu tiên, và khi nó đạt đến đó là kích thước rộng tối thiểu, nó đi qua đáy DataGrid
. Không chính xác những gì tôi muốn bởi vì tôi muốn mở rộng bố cục trước, sau đó hiển thị thanh cuộn trong DataGrid
thay vì bố cục vừa xem qua nó. Vì vậy, tôi thử như sau:
Ngay ở đây bạn có thể thấy rằng nó cho thấy thanh cuộn như tôi muốn. Điều duy nhất là nó đầu tiên thay đổi kích thước của DataGrid, và khi nó được thực hiện thay đổi kích thước của DataGrid, nó bắt đầu thay đổi kích thước Grid. Tôi muốn nó là một cách khác xung quanh, đầu tiên thay đổi kích thước lưới điện, sau đó thay đổi kích thước DataGrid và hiển thị thanh cuộn. Vì vậy, về cơ bản tôi đang tìm kiếm một giải pháp thực hiện những điều sau:
- Quy mô cửa sổ làm lưới.
- Quy mô lưới cho đến khi kích thước tối thiểu là
- Khi đã đạt đến kích thước tối thiểu và nó vẫn thu nhỏ hơn, hiển thị thanh cuộn trong DataGrid.
Vì vậy mà đi xuống đến các Gif đầu từ câu hỏi này, tiếp theo là thanh cuộn trong DataGrid
Có cách nào để làm điều này? Có vẻ như tôi rất gần vì đó là sự kết hợp của hai điều đó nhưng tôi không biết làm thế nào. Đây là mã của tôi:
<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>
Tôi nghĩ rằng 'RowDefinition'' Height' mặc định là 'Auto', do đó cả hai định nghĩa hàng của bạn' Heights' được đặt là 'Auto'. Hãy thử sử dụng 'Height =" * "' trên 'DataGridRow'' RowDefinition' của bạn. – Jose
@Kirenenko nếu tôi đặt 'Height =" * "' và 'maxheight =" 240 "' trong RowDefinition của tôi, tôi nhận được kết quả tương tự như trong gif đầu tiên – Markinson