locked
How to make xaml controls(TextBox) in WPF to fill remaining space of Grid? RRS feed

  • Question

  • How to make element Stretch/file parent cell of Grid without specifying height and with for respective element? 

    Here is my code:-

                                                                                                

       <Grid Margin="15px 0 15px 0">

                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="50*"></ColumnDefinition>
                    <ColumnDefinition Width="50*"></ColumnDefinition>
                </Grid.ColumnDefinitions>

                <ListBox Name="entryListBox" Grid.Column="0" Margin="0 0 7.5px 0"/>

                <StackPanel Grid.Column="1" Margin="7.5px 0 0 0" >

                    <Grid Margin="0 25px 0 25px">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="50" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="25" />
                            <RowDefinition Height="25" />
                            <RowDefinition Height="25" />
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>

                        <TextBlock Grid.Row="0" Grid.Column="0" >Title:</TextBlock>
                        <TextBox Grid.Row="0" Grid.Column="1" Name="titleText" />

                        <TextBlock Grid.Row="1" Grid.Column="0" >Url:</TextBlock>
                        <TextBox Grid.Row="1" Grid.Column="1" Name="urlText" />

                        <TextBlock Grid.Row="2" Grid.Column="0">Date:</TextBlock>
                        <TextBox Grid.Row="2" Grid.Column="1" Name="dateText" />

                        <TextBlock Grid.Row="3" Grid.Column="0">Body:</TextBlock>
                        <TextBox Grid.Row="3" Grid.Column="1" Name="bodyText" TextWrapping="Wrap" HorizontalContentAlignment="Stretch" Height="400"/>

                    </Grid>

                </StackPanel>
            </Grid>

    Here is the main code:-

        <TextBox Grid.Row="3" Grid.Column="1" Name="bodyText" TextWrapping="Wrap" HorizontalContentAlignment="Stretch" Height="400"/>

    How to stretch TextBox without specifying height attribute?


    Deepak Kumar Singh


    • Edited by ideepaksingh Thursday, September 12, 2013 12:07 PM Correction
    Thursday, September 12, 2013 12:04 PM

Answers

  • Do this:

        <Grid Margin="15 0 15 0" Background="Black">
    
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="50*"></ColumnDefinition>
                <ColumnDefinition Width="50*"></ColumnDefinition>
            </Grid.ColumnDefinitions>
    
            <ListBox Name="entryListBox" Grid.Column="0" Margin="0 0 7 0"/>
    
            
    
                <Grid Margin="0 25 0 25" x:Name="MyGrid" Grid.Column="1">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="50" />
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="25" />
                        <RowDefinition Height="25" />
                        <RowDefinition Height="25" />
                        <RowDefinition Height="*" />
                    </Grid.RowDefinitions>
    
                    <TextBlock Grid.Row="0" Grid.Column="0" >Title:</TextBlock>
                    <TextBox Grid.Row="0" Grid.Column="1" Name="titleText" />
    
                    <TextBlock Grid.Row="1" Grid.Column="0" >Url:</TextBlock>
                    <TextBox Grid.Row="1" Grid.Column="1" Name="urlText" />
    
                    <TextBlock Grid.Row="2" Grid.Column="0">Date:</TextBlock>
                    <TextBox Grid.Row="2" Grid.Column="1" Name="dateText" />
    
                    <TextBlock Grid.Row="3" Grid.Column="0">Body:</TextBlock>
                     <TextBox Grid.Row="3" Grid.Column="1" Name="bodyText" TextWrapping="Wrap" />
                  
    
                </Grid>
    
           
        </Grid>

    StackPanel minimizes the amount of area it occupies, so it's forcing the textbox to get as small as it can be.


    Matt Small - Microsoft Escalation Engineer - Forum Moderator
    If my reply answers your question, please mark this post as answered.

    NOTE: If I ask for code, please provide something that I can drop directly into a project and run (including XAML), or an actual application project. I'm trying to help a lot of people, so I don't have time to figure out weird snippets with undefined objects and unknown namespaces.


    Thursday, September 12, 2013 2:48 PM
    Moderator

All replies

  • Do this:

        <Grid Margin="15 0 15 0" Background="Black">
    
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="50*"></ColumnDefinition>
                <ColumnDefinition Width="50*"></ColumnDefinition>
            </Grid.ColumnDefinitions>
    
            <ListBox Name="entryListBox" Grid.Column="0" Margin="0 0 7 0"/>
    
            
    
                <Grid Margin="0 25 0 25" x:Name="MyGrid" Grid.Column="1">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="50" />
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="25" />
                        <RowDefinition Height="25" />
                        <RowDefinition Height="25" />
                        <RowDefinition Height="*" />
                    </Grid.RowDefinitions>
    
                    <TextBlock Grid.Row="0" Grid.Column="0" >Title:</TextBlock>
                    <TextBox Grid.Row="0" Grid.Column="1" Name="titleText" />
    
                    <TextBlock Grid.Row="1" Grid.Column="0" >Url:</TextBlock>
                    <TextBox Grid.Row="1" Grid.Column="1" Name="urlText" />
    
                    <TextBlock Grid.Row="2" Grid.Column="0">Date:</TextBlock>
                    <TextBox Grid.Row="2" Grid.Column="1" Name="dateText" />
    
                    <TextBlock Grid.Row="3" Grid.Column="0">Body:</TextBlock>
                     <TextBox Grid.Row="3" Grid.Column="1" Name="bodyText" TextWrapping="Wrap" />
                  
    
                </Grid>
    
           
        </Grid>

    StackPanel minimizes the amount of area it occupies, so it's forcing the textbox to get as small as it can be.


    Matt Small - Microsoft Escalation Engineer - Forum Moderator
    If my reply answers your question, please mark this post as answered.

    NOTE: If I ask for code, please provide something that I can drop directly into a project and run (including XAML), or an actual application project. I'm trying to help a lot of people, so I don't have time to figure out weird snippets with undefined objects and unknown namespaces.


    Thursday, September 12, 2013 2:48 PM
    Moderator
  • Thank you..

    Deepak Kumar Singh

    Friday, September 13, 2013 9:28 AM