How to force a WPF DataGrid to fill containing Grid cell

David DeMoney 0 Reputation points
2023-02-01T23:19:10.2133333+00:00

I have a DataGrid within a Grid, and want that DataGrid to fill the Grid cell, adding scroll bars when the content exceeds the available space. I have tried various options, but in most cases, when the content exceeds the space, the scroll bars are placed on the outer grid, instead of the DataGrid (and scrolling moves the DG headers off the page). The only partial solution I have found is to size the DataGrid based on a percentage of SystemParameters.PrimaryScreenWidth/Height - which is not ideal because it only works when app is maximized (and probably only on primary monitor).


        <Grid Grid.Row="1">
			<Grid.RowDefinitions>
				<RowDefinition Height="Auto"></RowDefinition>
				<RowDefinition Height="*" />
			</Grid.RowDefinitions>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" Grid.Row="0" Grid.Column="0" Margin="5">
                <GroupBox Grid.Row="0" Grid.Column="0" Margin="5" Header="{x:Static p:Resources.kstrTypeOfEventLog}">
                    <StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="5,5,5,5">
                        <RadioButton x:Name="m_rbPrimary" Tag="4.0" Content="{x:Static p:Resources.kstrPrimary}" Margin="5,5,5,5" GroupName="EventType" IsChecked="True" Command="{Binding DisplayPrimaryEventCmd}" />
                        <RadioButton x:Name="m_rbAlternate" Tag="4.0" Content="{x:Static p:Resources.kstrAlternate}" Margin="5,5,5,5" GroupName="EventType" Command="{Binding DisplayAlternateEventCmd}" />
                    </StackPanel>
                </GroupBox>
                <Button Content="{x:Static p:Resources.kstrView}" Height="25" Padding="20,2" Margin="10,20" Command="{Binding ViewEventCmd}" IsEnabled="{Binding IsEnableViewButton}" />
                <Button Content="{x:Static p:Resources.kstrClear}" Height="25" Padding="20,2" Margin="10,20" Command="{Binding ClearTableCmd}" IsEnabled="{Binding IsEnableClearButton, Mode=OneWay}" />
            </StackPanel>
            <DataGrid Grid.Row="1" ItemsSource="{Binding EventList}" Grid.Column="0" RowHeaderWidth="0" AutoGenerateColumns="False" 
						CanUserResizeColumns="True" CanUserReorderColumns="False" CanUserAddRows="False" FrozenColumnCount="4" Margin="10" 
						MinWidth="{Binding ConverterParameter=0.6, Converter={helper:RatioConverter}, Source={x:Static SystemParameters.PrimaryScreenWidth}}" 
						MinHeight="{Binding ConverterParameter=0.5, Converter={helper:RatioConverter}, Source={x:Static SystemParameters.PrimaryScreenHeight}}" 					  
						MaxWidth="{Binding ConverterParameter=0.65, Converter={helper:RatioConverter}, Source={x:Static SystemParameters.PrimaryScreenWidth}}" 
						MaxHeight="{Binding ConverterParameter=0.7, Converter={helper:RatioConverter}, Source={x:Static SystemParameters.PrimaryScreenHeight}}" 					  
						Width="Auto" Height="Auto" VerticalAlignment="Stretch" HorizontalAlignment="Left">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="{x:Static p:Resources.kstrSequenceNo}" Binding="{Binding Event_Seq}" Width="Auto" MinWidth="{Binding Source={x:Static SystemParameters.PrimaryScreenWidth}, Converter={helper:RatioConverter}, ConverterParameter='0.035'}" IsReadOnly="True" />
                    <DataGridTextColumn Header="{x:Static p:Resources.kstrTime}" Binding="{Binding Time}" Width="Auto" MinWidth="{Binding Source={x:Static SystemParameters.PrimaryScreenWidth}, Converter={helper:RatioConverter}, ConverterParameter='0.08'}" IsReadOnly="True" />
                    <DataGridTextColumn Header="{x:Static p:Resources.kstrUser}" Binding="{Binding User}" Width="Auto" MinWidth="{Binding Source={x:Static SystemParameters.PrimaryScreenWidth}, Converter={helper:RatioConverter}, ConverterParameter='0.03'}" IsReadOnly="True" />
                    <DataGridTextColumn Header="{x:Static p:Resources.kstrEventNo}" Binding="{Binding Event_No}" Width="Auto" MinWidth="{Binding Source={x:Static SystemParameters.PrimaryScreenWidth}, Converter={helper:RatioConverter}, ConverterParameter='0.03'}" IsReadOnly="True" />
                    <DataGridTextColumn Header="{x:Static p:Resources.kstrStdMfgId}" Binding="{Binding StdMfg_Id}" Width="Auto" MinWidth="{Binding Source={x:Static SystemParameters.PrimaryScreenWidth}, Converter={helper:RatioConverter}, ConverterParameter='0.03'}" IsReadOnly="True" />
                    <DataGridTextColumn Header="{x:Static p:Resources.kstrEventName}" Binding="{Binding Event_No_Description}" Width="Auto" MinWidth="{Binding Source={x:Static SystemParameters.PrimaryScreenWidth}, Converter={helper:RatioConverter}, ConverterParameter='0.15'}" IsReadOnly="True" />
                    <DataGridTextColumn Header="{x:Static p:Resources.kstrArgValue}" Binding="{Binding Event_Arg}" Width="Auto" MinWidth="{Binding Source={x:Static SystemParameters.PrimaryScreenWidth}, Converter={helper:RatioConverter}, ConverterParameter='0.035'}" IsReadOnly="True" />
                    <DataGridTextColumn Header="{x:Static p:Resources.kstrArgumentDescription}" Binding="{Binding Event_Arg_Description}" Width="Auto" MinWidth="{Binding Source={x:Static SystemParameters.PrimaryScreenWidth}, Converter={helper:RatioConverter}, ConverterParameter='0.3'}" IsReadOnly="True" />
                </DataGrid.Columns>
            </DataGrid>
        </Grid>
Developer technologies | Windows Presentation Foundation
{count} votes

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.