【发布时间】:2017-03-25 17:09:43
【问题描述】:
我有一个需要响应式的 WPF 应用程序。我想要的是在Grid 中的DataGrid。当窗口缩小时,我希望Grid 先调整大小,然后再调整DataGrid。以下是我目前取得的成就:
在顶部的 gif 中,您可以看到 Grid 首先调整大小,当它达到最小缩放大小时,它会越过底部 DataGrid。不完全是我想要的,因为我想先缩放布局,然后在 DataGrid 中显示一个滚动条,而不是仅仅覆盖它的布局。所以我尝试了以下方法:
在这里你可以看到它显示了我想要的滚动条。唯一的事情是它首先调整 DataGrid 的大小,当它调整完 DataGrid 的大小时,它开始调整 Grid 的大小。我希望它反过来,首先调整网格的大小,然后调整 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>
【问题讨论】:
-
我认为
RowDefinitionHeight默认为Auto,因此您的两个行定义Heights都设置为Auto。尝试在您的DataGridRowRowDefinition上使用Height="*"。 -
@Kirenenko 如果我在 RowDefinition 中设置
Height="*"和maxheight="240",我会得到与第一个 gif 中相同的结果
标签: wpf xaml user-interface datagrid