UWP grid to fill parent window

23,423

You're trying to hard :) Sometimes XAML can be easy.

Container controls like Grid and RelativePanel automatically scale to the full available size of their parent, while others like StackPanel only grow to the minimal size needed for their child elements. Only the latter type needs HorizontalAlignment="Stretch" and VerticalAlignment="Stretch" to fill the screen. Never bind the Width/Height properties.

This should be enough to go full screen (if your grid is directly under a page and not in a StackPanel or similar control):

<Grid x:Name="Grid">
    <Grid.Background>
        <ImageBrush Stretch="UniformToFill" ImageSource="Assets/france_countryside.jpg" Opacity="0.4" />
    </Grid.Background>

    <!--Search section-->

    <RelativePanel>
        ...
    </RelativePanel>
</Grid>

Edit in reply to added code of the splitview in the question:

I noticed both SplitView and Frame have HorizontAlignment="Left". That's saying: "instead of using my full screen, only use whatever size you minimally need and align to the left". Remove those assignments and the width of your Frame. Prevent using alignments (left/right/center) or sizes (width/height) when you want to fill your parent control.

<!--Split View-->
<SplitView Name="MySplitView" 
           Grid.Row="1" 
           DisplayMode="CompactOverlay" 
           OpenPaneLength="200" 
           CompactPaneLength="48">
....

    <!--SplitView Content-->
    <Frame x:Name="MyFrame" />
</SplitView>
Share:
23,423
Evilunclebill
Author by

Evilunclebill

Currently studying an AP in computer science. Interests in Python, Java and C#.

Updated on November 05, 2020

Comments

  • Evilunclebill
    Evilunclebill over 3 years

    We are working on a school project and has run into a dead end. We are trying to make the grid fill the entire parent window but we are simply not able to do so.

    This is what the designer shows and how we want it to look: enter image description here

    And this is how it looks when we run it: enter image description here

    Here is our xaml code:

    <Grid x:Name="Grid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="{Binding ActualWidth, RelativeSource = {RelativeSource Mode=TemplatedParent}}" Height="{Binding ActualHeight, RelativeSource ={RelativeSource Mode=TemplatedParent}}">
        <Grid.Background>
            <ImageBrush Stretch="UniformToFill" ImageSource="Assets/france_countryside.jpg" Opacity="0.4" />
        </Grid.Background>
    
        <!--Search section-->
    
        <RelativePanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="{Binding ElementName=Grid,Path=ActualWidth}">
            <TextBlock Text="Find available apartment" FontSize="24" Margin="30" RelativePanel.AlignHorizontalCenterWithPanel="True" />
            <AutoSuggestBox Name="AutoSuggestBox" 
                            PlaceholderText="Search" 
                            Width="300" 
                            RelativePanel.AlignHorizontalCenterWithPanel="True" 
                            Margin="0,100,0,0"
                            TextChanged="AutoSuggestBox_OnTextChanged"
                            Header="Destination:"/>
            <CalendarDatePicker Name="CheckInPicker" Header="Check in:" RelativePanel.Below="AutoSuggestBox" RelativePanel.AlignLeftWith="AutoSuggestBox" Margin="0,40,0,0" PlaceholderText="select a date" IsTodayHighlighted="False"/>
            <CalendarDatePicker Name="CheckOutPicker" Header="Check out:" RelativePanel.Below="AutoSuggestBox" RelativePanel.AlignRightWith="AutoSuggestBox" Margin="0,40,0,0"/>
            <ComboBox x:Name="numberOfGuestsBox"  Width="127" RelativePanel.Below="CheckInPicker" RelativePanel.AlignLeftWith="AutoSuggestBox" Margin="0,30,0,0" PlaceholderText="Choose" Header="Guests:" FontSize="15">
                <x:String>1</x:String>
                <x:String>2</x:String>
                <x:String>3</x:String>
                <x:String>4</x:String>
                <x:String>5</x:String>
                <x:String>6</x:String>
                <x:String>7</x:String>
                <x:String>8</x:String>
                <x:String>9</x:String>
                <x:String>10</x:String>
            </ComboBox>
            <ToggleSwitch Header="Smoking allowed?" Margin="0,30,0,0" RelativePanel.Below="CheckOutPicker" RelativePanel.AlignLeftWith="CheckOutPicker" OffContent="Eew - No!" OnContent="Ya man!"/>
            <Button x:Name="SearchButton" Content="Search available apartments" RelativePanel.Below="numberOfGuestsBox" RelativePanel.AlignHorizontalCenterWithPanel="True" Margin="0,30,0,30" Width="300" Height="50" Background="MediumSeaGreen" Foreground="AliceBlue" Click="SearchButton_Click"/>
        </RelativePanel>
    </Grid>
    

    How do we go about this?
    We have tried what to us seems everything with stretching. Margin is not really an option as we want it to be able to re-size.

    It seems like (to us) that the grid is fitting the relative panel and shrinks to that size. We are somewhat sure that if we get the grid to fit the screen size of the window the relative panel will be placed in the middle. Thanks for your help in advance!


    Edit:

    We hold the "views" inside a frame that might be causing the problem. When i re-size the frame the image re-sized and the splitview moves to the "middle" but the scaling doesn't work on the splitview nor the picture.

    Here is the code for the splitview:

        <!--Split View-->
        <SplitView Name="MySplitView" 
                   Grid.Row="1" 
                   DisplayMode="CompactOverlay" 
                   OpenPaneLength="200" 
                   CompactPaneLength="48" 
                   HorizontalAlignment="Left">
    
            <!--SplitView Pane for icons-->
            <SplitView.Pane>
                <ListBox Name="IconsLIstBox" SelectionMode="Single" SelectionChanged="IconsLIstBox_OnSelectionChanged">
                    <ListBoxItem Name="HomeListItem">
                        <StackPanel Orientation="Horizontal">
                            <TextBlock FontFamily="Segoe MDL2 Assets" FontSize="24" Text="&#xE10F;"/>
                            <TextBlock Text="Home" Margin="20,0,0,0"/>
                        </StackPanel>
                    </ListBoxItem>
                    <ListBoxItem Name="LocationsListBoxItem">
                        <StackPanel Orientation="Horizontal">
                            <TextBlock FontFamily="Segoe MDL2 Assets" FontSize="24" Text="&#xE1D1;"/>
                            <TextBlock Text="Locations" Margin="20,0,0,0"/>
                        </StackPanel>
                    </ListBoxItem>
                    <ListBoxItem Name="MostPopularListBoxItem">
                        <StackPanel Orientation="Horizontal">
                            <TextBlock FontFamily="Segoe MDL2 Assets" FontSize="24" Text="&#xE24A;"/>
                            <TextBlock Text="Most Popular" Margin="20,0,0,0"/>
                        </StackPanel>
                    </ListBoxItem>
                    <ListBoxItem Name="MapListBoxItem">
                        <StackPanel Orientation="Horizontal">
                            <TextBlock FontFamily="Segoe MDL2 Assets" FontSize="24" Text="&#xE128;"/>
                            <TextBlock Text="Map" Margin="20,0,0,0"/>
                        </StackPanel>
                    </ListBoxItem>
                    <ListBoxItem Name="ProfileListBoxItem">
                        <StackPanel Orientation="Horizontal">
                            <TextBlock FontFamily="Segoe MDL2 Assets" FontSize="24" Text="&#xE170;"/>
                            <TextBlock Text="Profile" Margin="20,0,0,0"/>
                        </StackPanel>
                    </ListBoxItem>
                    <ListBoxItem Name="ContactListBoxItem">
                        <StackPanel Orientation="Horizontal">
                            <TextBlock FontFamily="Segoe MDL2 Assets" FontSize="24" Text="&#xE166;"/>
                            <TextBlock Text="Contact" Margin="20,0,0,0"/>
                        </StackPanel>
                    </ListBoxItem>
                </ListBox>
            </SplitView.Pane>
    
            <!--SplitView Content-->
            <Frame x:Name="MyFrame" HorizontalAlignment="Left" Width="1043"/>
        </SplitView>
    
    </Grid>
    

    We've tried with the frame being inside a splitview.content but there is no difference between the two.

  • Evilunclebill
    Evilunclebill over 8 years
    We have tried this as well. I think I have localized the error to another place. As you can see from the 2nd image we have a hamburger menu which is in a splitview and the content is loaded into a frame (the view from the 1st image). Is there a way to make a frame fill the window? Cause when i resize the frame to, say 800, the image and relative panel resizes accordingly and moves!
  • Evilunclebill
    Evilunclebill over 8 years
    Check my edit with the code. It is nearly the same as the one linked apart from the navigation.
  • Bart
    Bart over 8 years
    Updated answer as well. Never use alignments/sizes when trying to achieve full screen behavior.