根据屏幕分辨率调整数据网格大小

时间:2017-10-17 19:39:11

标签: c# wpf xaml datagrid

我的屏幕上有一个嵌套的数据网格。它不占用我窗口的整个空间。我设置了数据网格的高度和宽度。我的问题是每个屏幕分辨率的数据网格大小是相同的。如何根据分辨率进行调整? 我可以用MinWidth和MaxWidth以某种方式做到这一点吗?或类似的东西?如果我使用SizeToContent,它不会最大化窗口。

这就是窗口的外观 This is how the window should look 这是网格和主表的XAML定义:

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" MinHeight="30"/>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto"  />
            <RowDefinition Height="Auto"  />
            <RowDefinition />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="209*" />
        </Grid.ColumnDefinitions>
    <DataGrid Name="tabela" Grid.Row="1" Width="1100" Height="700" HorizontalAlignment="Center" IsReadOnly="True" AlternatingRowBackground="#eeeeee" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto"  ItemsSource="{Binding}" AutoGenerateColumns="False" RowDetailsVisibilityChanged="tabela_RowDetailsVisibilityChanged" SelectionChanged="tabela_SelectionChanged" >

1 个答案:

答案 0 :(得分:1)

试试这个:

<Grid>
    <DataGrid Name="tabela"
              HorizontalAlignment="Stretch" 
              VerticalAlignment="Stretch"
              IsReadOnly="True"
              AlternatingRowBackground="#eeeeee"
              ItemsSource="{Binding}"
              AutoGenerateColumns="False"
              RowDetailsVisibilityChanged="tabela_RowDetailsVisibilityChanged" 
              SelectionChanged="tabela_SelectionChanged" >
    </DataGrid>
</Grid>

如果您希望您的控件根据其父级大小调整大小(在这种情况下它是您的窗口),则根本无法设置WidthHeight。如果您愿意,可以使用MinWidthMinHeightMaxWidthMaxHeight,但在大多数情况下,控件只需拉伸以占用所有可用空间。它由HorizontalAlignment="Stretch"VerticalAlignment="Stretch"设置(在大多数情况下,这些是默认值,但我已明确设置它们,以防您在其他地方覆盖它)。

另一件事是,如果您使用GridColumnDefinitions设置RowDefinitions,如果您不使用它,请不要这样做。仅Grid就足以成为DataGrid等单一控件的容器。如果您设置了RowsColumns,则可以将WidthHeight设置为以下三种值类型之一:

  • 确切值(例如100)
  • Auto - RowsColumns会调整大小以获取与其内容一样多的空间
  • * - 这是一个比例标记,因此当您有三个列时,将星形宽度设置为一列,将使此列占用所有可用空间。另一方面,如果您有两列,并将Width="*"设置为第一列,Width="2*"设置为第二列,则所有可用空间将分为3个部分,第一列将获得1/3它和第二个2/3(你可以随意玩它)。